【发布时间】:2015-04-09 17:50:33
【问题描述】:
我正在尝试使用 EF Code First 来做到这一点:
有两个表:Users 和Areas。一个用户属于一个需要的区域,一个区域可以有零个或一个用户(作为管理员)。那么:
用户 *..1 区域和 用户 0..1 领域
用户类:
public class User {
public int UserId { get; set; }
public string Name { get; set; }
[ForeignKey("Area")]
public int AreaId { get; set; }
[InverseProperty("Users")]
public virtual Area Area { get; set; }
public virtual Area AreaTitular { get; set; }
}
区域类:
public class Area {
public int AreaId { get; set; }
public string Name { get; set; }
public List<User> Users { get; set; }
[ForeignKey("User")]
public int? UserId { get; set; }
[InverseProperty("AreaTitular")]
public virtual User User{ get; set; }
}
更新数据库命令的错误:
无法确定类型“TestEntityFrameworkCodeFirst.Model.Area”和“TestEntityFrameworkCodeFirst.Model.User”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。
任何帮助将不胜感激:)
我不完全确定这是否可以:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<Area>()
.HasOptional(i => i.User)
.WithOptionalDependent();
base.OnModelCreating(modelBuilder);
}
刚刚在 Context 类的 OnModelCreating 上添加了这个。这就是它在 SQL Server 中的样子:
【问题讨论】:
-
Entity Framework 不知道哪一个是 1,哪一个是 0。它告诉你在错误中做什么。但是为什么你有两个
Area导航属性呢? -
@Claies User.Area 转到 Area.Usuario,而 User.AreaTitular 转到 Area.Usuario.. 这是错的吗?
-
@ChrisV 我的问题是关于在两个类上有两个关系。另一个是关于 1..1 关系对吗?
-
我仍然不确定我是否理解您想要做什么。您想对同一个类有 2 种不同的关系吗?
标签: entity-framework one-to-many code-first one-to-one relationships