我在找到可选的一对多关系时遇到问题。
我的模特是:
public class Person
{
public int Identifier { get; set; }
...
public virtual Department Department { get; set; }
}
public class Department
{
public int Identifier { get; set; }
...
public virtual IList<Person> Members { get; set; }
}
我想为Department
分配零个或一个Person
。分配后,Person
应显示在Members
- Department
的列表中。
我使用Fluent API配置Person
,如下所示:
HasKey(p => p.Identifier);
HasOptional(p => p.Department).WithMany(d => d.Members);
还通过配置Department
而不是Person
来尝试另一种方式:
HasMany(d => d.Members).WithOptional(p => p.Department);
然而,我采用两种方式获得例外:
无法确定类型&#39; Person&#39;之间关联的主要结尾。和&#39;部门&#39;。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
当同时配置这两个时,我得到:
导航属性&#39;部门&#39;在类型&#39; Person&#39;上声明已经配置了冲突的多重性。
对于另一个实体类型使用与Person
相同的配置,但该实体类型引用自身。
如何正确配置此关系?
答案 0 :(得分:8)
你可以试试这个:
this.HasOptional(s => s.Department)
.WithMany(s => s.Members)
.HasForeignKey(s => s.MemberOfDepartment);
答案 1 :(得分:0)
modelBuilder.Entity()。HasMany(x =&gt; x.MemberOfDepartment).WithOptional();
答案 2 :(得分:0)
也可以尝试以下方法:
public class Person
{
public int Identifier { get; set; }
public int DepartmentIdentifier {get; set;}
public virtual Department Department { get; set; }
}
public class Department
{
public int Identifier { get; set; }
public virtual IList<Person> Members { get; set; }
}
使用Fluent API的EF Person配置:
this.HasRequired(p => p.Department).WithMany(d => d.Members).HasForeignKey(p =>
p.DepartmentIdentifier);
this.Property(p => p.DepartmentIdentifier).IsRequired();