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

giv*_*ght 4 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; }
}
Run Code Online (Sandbox Code Playgroud)

我想分配零或一个DepartmentPerson.分配时,Person应显示在Members-List中Department.

我正在配置Person使用Fluent API,如下所示:

HasKey(p => p.Identifier);
HasOptional(p => p.Department).WithMany(d => d.Members);
Run Code Online (Sandbox Code Playgroud)

另外通过配置Department而不是Person:

HasMany(d => d.Members).WithOptional(p => p.Department);
Run Code Online (Sandbox Code Playgroud)

但是我用这两种方法得到了例外:

无法确定类型'Person'和'Department'之间关联的主要结束.必须使用关系流畅API或数据注释显式配置此关联的主要结尾.

当同时配置这两个时,我得到:

在'Person'类型上声明的导航属性'Department'已配置了冲突的多重性.

使用与Person用于另一个实体类型的配置相同的配置,但该实体类型引用自身.

如何正确配置这种关系?

Far*_*yev 8

你可以试试这个:

this.HasOptional(s => s.Department)
    .WithMany(s => s.Members)
    .HasForeignKey(s => s.MemberOfDepartment);
Run Code Online (Sandbox Code Playgroud)