实体框架中的可选一对多关系[关闭]
Posted
技术标签:
【中文标题】实体框架中的可选一对多关系[关闭]【英文标题】:Optional One-to-many Relationship in Entity Framework [closed] 【发布时间】:2015-06-01 02:20:12 【问题描述】:我在让可选的一对多关系正常工作时遇到问题。
我的模型是:
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
应显示在Department
的Members
列表中。
我正在使用 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);
但是两种方式我都得到了例外:
无法确定类型“Person”和“Department”之间关联的主体端。此关联的主体端必须使用关系流式 API 或数据注释显式配置。
当同时配置两者时,我得到:
在类型“Person”上声明的导航属性“Department”已配置有冲突的多重性。
对另一种实体类型使用与 Person
相同的配置有效,但是该实体类型引用自身。
如何正确配置这种关系?
【问题讨论】:
没关系,我从模型中删除了ForeignKeyIndexConvention
。再次添加后,它起作用了。
【参考方案1】:
你可以试试这个:
this.HasOptional(s => s.Department)
.WithMany(s => s.Members)
.HasForeignKey(s => s.MemberOfDepartment);
【讨论】:
【参考方案2】:modelBuilder.Entity<Department>().HasMany(x => x.MemberOfDepartment).WithOptional();
【讨论】:
【参考方案3】:也试试这个:
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();
【讨论】:
它说 我想将零或一个Department
分配给 Person
。以上是关于实体框架中的可选一对多关系[关闭]的主要内容,如果未能解决你的问题,请参考以下文章