2013-01-23 90 views
0

我的模型中有以下類 - 但無法按照我的預期創建表。爲與自己相關的實體創建正確的模型

public class Task 
{ 
    public int Id { get; set; } 
    public string Description { get; set; } 
    private readonly BindingList<Dependancy> _dependancies = new BindingList<Dependancy>(); 
    public virtual BindingList<Dependancy> Dependancies 
    { 
     get { return _dependancies; } 
    } 
} 

public class Dependancy 
{ 
    public int Id { get; set; } 
    [Required] 
    public virtual Task Task { get; set; } 
    [Required] 
    public virtual Task NeededTask { get; set; } 
} 

我想Dependancy表只是爲了包含以下字段;

Id, 
Task_Id, 
NeededTask_Id 

然而所生成的一個包含一個額外Task_Id1字段

我試圖在上下文類下面超越控制;

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Dependancy>().HasRequired(p=>p.Task).WithMany().WillCascadeOnDelete(false); 
     modelBuilder.Entity<Task>().HasMany<Dependancy>(c => c.Dependancies).WithOptional().WillCascadeOnDelete(false); 
    } 

但仍然創建不需要的字段。

回答

1

實體框架不知道Dependancy.TaskTask.Dependancies是成對的,所以它創建了兩個外鍵字段,一個用於兩個關聯。你必須告訴EF這兩個協會是同行:

modelBuilder.Entity<Dependancy>().HasRequired(p => p.Task) 
    .WithMany(t => t.Dependancies).WillCascadeOnDelete(false); 

其他關聯可以通過

modelBuilder.Entity<Dependancy>().HasOptional(p => p.NeededTask) 
    .WithMany().WillCascadeOnDelete(false); 
定義
相關問題