2014-10-27 135 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