2013-10-12 30 views
0

我想在EF 4.3创建这三种模式:实体框架代码优先多个父Maaping

- Family 
    - Guid FamilyId 
    - ICollection< Person> Members 
- Company 
    - Guid CompanyId 
    - ICollection< Person> Employees 
- Person 
    - Guid PersonId 
    - String Name 

A person can belong to multiple families and multiple companies, as well as doesn't belong to any. 

运行代码后,在数据库中的映射似乎有点陌生。家庭成员和公司员工未被映射。此外,Persons表中还有四列:PersonId,Name,Family_FamilyId和Company_CompanyId。

我认为我的代码意味着一个人将永远属于1家庭和1个公司。我应该如何更改代码?

回答

0

我结束了改变模型类

  • 家庭
    • Guid FamilyId
    • ICollection的<人>会员
  • 公司
    • 的Guid CompanyId
    • ICollection的<人>员工
    • 的Guid PERSONID
    • 字符串名称
    • ICollection的<家庭>家庭
    • ICollection的<公司>公司
1

你不能在你的想法中表达所有这些信息。要添加额外的信息,您有几个选项。

您可以添加到您的EF上下文类

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    //All people must belong to a family. 
    modelBuilder.Entity<Family>().HasMany(x => x.Members) 
      .WithRequired(); 

    //Each person may belong to ZERO-Many companies. 
    modelBuilder.Entity<Company>().HasMany(x => x.Employees) 
      .WithMany();   
} 

或者给你的EF上下文类

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Configurations.Add(new ComapnyMapper()); 
    modelBuilder.Configurations.Add(new FamilyMapper()); 

} 

public class FamilyMapper : EntityTypeConfiguration<Family> 
{ 
    public FamilyMapper() 
    { 
      HasMany(x => x.Members) 
      .WithRequired();   
    } 
} 
public class CompanyMapper : EntityTypeConfiguration<Company> 
{ 
    public CompanyMapper() 
    { 
      HasMany(x => x.Employees) 
      .WithMany();   
    } 
}