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

C# 实体框架中可选的一对多关系,c#,entity-framework,entity-framework-6,ef-fluent-api,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&

我在选择一对多关系时遇到了问题

我的模型是:

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; }
}
还尝试了另一种方法,即配置
部门
,而不是
人员

HasMany(d => d.Members).WithOptional(p => p.Department);
然而,在这两种情况下,我都遇到了一个例外:

无法确定类型“Person”和“Department”之间关联的主体端。必须使用关系fluent API或数据注释显式配置此关联的主体端

当同时以这种方式配置两者时,我得到:

在类型“Person”上声明的导航属性“Department”已配置有冲突的多重性

使用与另一个实体类型的
Person
相同的配置可以工作,但是该实体类型引用自身

如何正确配置此关系?

您可以尝试以下方法:

this.HasOptional(s => s.Department)
    .WithMany(s => s.Members)
    .HasForeignKey(s => s.MemberOfDepartment);
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; }
}
modelBuilder.Entity();
也可以尝试以下方法:

this.HasOptional(s => s.Department)
    .WithMany(s => s.Members)
    .HasForeignKey(s => s.MemberOfDepartment);
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; }
}

无论如何,我从模型中删除了
ForeignKeyIndexConvention
。再次添加后,它起作用了。它说我想给一个
分配零个或一个
部门。
this.HasRequired(p => p.Department).WithMany(d => d.Members).HasForeignKey(p => 
p.DepartmentIdentifier);

this.Property(p => p.DepartmentIdentifier).IsRequired();