我有以下实体:
public class User
{
[Key, MaxLength(8)]
public string Id { get; set; }
[Required]
public short DepartmentId { get; set; }
public virtual Department Department { get; set; }
}
public class Department
{
[Key]
public short Id { get; set; }
[Required]
public string Name { get; set; }
public string ManagerUserId { get; set; }
public virtual User Manager { get; set; }
}
我无法管理如何添加下图中显示的关系:
我的主要问题是添加ManagerUserId
和User
实体之间的关系。做了一些研究后,我尝试了以下几点:
[ForeignKey("ManagerUserId")]
public virtual User Manager { get; set; }
但它一直给我以下错误:
无法确定类型'CheckFlights.User'和'CheckFlights.Department'之间关联的主要结束。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
问:我如何让它拥有上图中的关系? Manager
实体中的Department
属性可以是用户还是null?用户可以同时成为少数部门的经理。
答案 0 :(得分:1)
EF尝试按照两种类型之间的约定建立单个一对一关系,因为两个导航属性都是引用(而不是集合)。但实际上你想要两个一对多的关系。您必须使用Fluent API覆盖默认约定才能实现此目的:
modelBuilder.Entity<User>()
.HasRequired(u => u.Department)
.WithMany()
.HasForeignKey(u => u.DepartmentId);
modelBuilder.Entity<Department>()
.HasOptional(d => d.Manager)
.WithMany()
.HasForeignKey(d => d.ManagerUserId);