实体框架中可选的一对多关系

时间:2015-03-27 16:54:07

标签: c# entity-framework entity-framework-6 ef-fluent-api

我在找到可选的一对多关系时遇到问题。

我的模特是:

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相同的配置,但该实体类型引用自身。

如何正确配置此关系?

3 个答案:

答案 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();