2014-10-27 103 views
0

我有以下的(简化)类:实体框架多对多代码首先

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace EFTest 
{ 
    public class TextContext : DbContext 
    { 
     public DbSet<People> People { get; set; } 
     public DbSet<File> Files { get; set; } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>(); 
     } 
    } 

    public class People 
    { 
     public People() 
     { 
      Files = new List<File>(); 
     } 
     public int PeopleId { get; set; } 
     public string Nombre { get; set; } 
     public List<File> Files { get; set; } 
    } 

    public class File 
    { 
     public File() 
     { 
      Friends = new List<People>(); 
      Foes = new List<People>(); 
     } 
     public Int16 FileId { get; set; } 
     public List<People> Friends { get; set; } 
     public List<People> Foes { get; set; } 
    } 
} 

当数据库创建我希望它有人民和文件联合表。但是没有创建,只有表People和表文件。

以下是实体数据的图像模型

enter image description here

我预计,该模型显示一个多对多的关系,因为每个人可能有许多文件和每个文件可能有许多人

我对EF很新,我知道我需要使用Fluent Api来配置关系,但到目前为止,我尝试过的所有代码都失败了。

感谢您的帮助

回答

0

尝试使用virtual关键字设置你的相关机构,从而EF可以覆盖和执行这些导航属性本身。另外,我倾向于使用属性的接口而不是具体的类。您的电话...

public class People 
{ 
    public People() 
    { 
     Files = new List<File>(); 
    } 
    public int PeopleId { get; set; } 
    public string Nombre { get; set; } 
    public virtual ICollection<File> Files { get; set; } 
} 

public class File 
{ 
    public File() 
    { 
     Friends = new List<People>(); 
     Foes = new List<People>(); 
    } 
    public Int16 FileId { get; set; } 
    public virtual ICollection<People> Friends { get; set; } 
    public virtual ICollection<People> Foes { get; set; } 
} 
+0

尝试使用虚拟和Icollection。结果是完全一样的。 – Luxfer 2014-10-27 01:56:10