1

我来自Java,现在正在使用C#和Entity Framework将现有系统实现到数据库中。如何使用Entity Framework和Fluent API映射复杂的一对多

由于我不能在这里显示实际的类,我试图做一个与我的问题相同的例子,如下所示。 我有一个Company其中有几个属性列表Person。当我使用EF将其转换为数据库时,我为每个Person实例获取一个新的外键列。

Company 
    public GUID CompanyID {get,set} 
    public List<Person> Employee{get,set} 
    public List<Person> Janitors {get,set} 
    public List<Person> Students {get,set} 
    public List<Person> Professors {get,set}  

Person 
    public GUID CompanyID {get,set} 

我想人的数据库方案是

|Column 1 | Column 2 | Column 3 | Company_FK | 
---------------------------------------------- 

但现在它更像是这

| Column 1 | Column 2 | Column 3 | Company_ID | Company_ID1 | Company_ID2 ... 
-------------------------------------------------------------------------- 
            null   reference  null 
            null   reference  null 
            reference   null  null 
       ~~~~~~~~~~~~~~~~~~~~~~etc~~~~~~~~~~~~~~~~~~ 

所有这些COMPANY_ID *列具有相同的公司表引用,因此我相信只有一列用于此参考并不是不可能的,然后将所有这些参考文献都删除。

我需要一个Fluent API解决方案,而不是数据注解。

回答

1

与贵公司的配置试试这个:

HasMany(x => x.Employee).WithRequired().HasForeignKey(x => x.CompanyID); 
HasMany(x => x.Janitors).WithRequired().HasForeignKey(x => x.CompanyID); 
HasMany(x => x.Students).WithRequired().HasForeignKey(x => x.CompanyID); 
HasMany(x => x.Professors).WithRequired().HasForeignKey(x => x.CompanyID); 
+0

它是成功的,但我得到这个错误消息“到数据库的更改被成功提交,但出现错误而更新对象上下文的ObjectContext的可能。处于不一致的状态内部异常消息:发生了参照完整性约束冲突:定义参照约束的属性值在关系中的主体和从属对象之间不一致。但是你的代码工作,我很感谢你的帮助@JustAnotherUserYouMayKnow – jonas 2013-02-21 11:52:22

相关问题