2014-10-02 43 views
0

我不明白爲什麼EF在我的TemplateTaskDependancies表中創建一個可爲空的TemplateTask_Id列。我認爲使用模型構建器配置類可以解決這個問題,但我一定會錯過一些東西。爲什麼我在代碼第一次創建的表中得到一個不需要的列?

我的域類如下。

[Table("TemplateTaskDependancies")] 
public class TemplateTaskDependancy : Dependancy<TemplateTask>, 
             IDependancy<TemplateTask> 
{ 
    [Column("TaskId")] 
    public int TaskId { get; set; } 

    [Column("NeededTaskId")] 
    public int NeededTaskId { get; set; } 

    [ForeignKey("TaskId")] 
    public override TemplateTask Task { get; set; } 

    [ForeignKey("NeededTaskId")] 
    public override TemplateTask NeededTask { get; set; } 
} 

public abstract class Dependancy<T> : LoggedEntity 
    where T : LoggedEntity 
{ 
    [Column("TaskId")] 
    public int TaskId { get; set; } 

    [Column("NeededTaskId")] 
    public int NeededTaskId { get; set; } 

    [ForeignKey("TaskId")] 
    public abstract T Task { get; set; } 

    [ForeignKey("NeededTaskId")] 
    public abstract T NeededTask { get; set; } 

} 

public interface IDependancy<T> where T : LoggedEntity 
{   
    int Id { get; set; }   

    int TaskId { get; set; } 

    int NeededTaskId { get; set; } 

    T NeededTask { get; set; } 

    T Task { get; set; } 

    State { get; set; } 
} 

public abstract class LoggedEntity : IObjectWithState 
{ 
    public int Id { get; set; } // primary key 

    // todo with Julie Lerman's repository pattern 
} 

在我的方面,我有

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Conventions 
       .Remove<OneToManyCascadeDeleteConvention>(); 
    modelBuilder.Configurations 
       .Add(new TemplateTaskDependancyConfiguration()); 
} 

public class TemplateTaskDependancyConfiguration : 
      EntityTypeConfiguration<TemplateTaskDependancy> 
{ 
    public TemplateTaskDependancyConfiguration() 
    { 
     HasRequired(x => x.NeededTask) 
     .WithMany(y=>y.NeededTasks) 
     .HasForeignKey(z=>z.NeededTaskId) 
     .WillCascadeOnDelete(false); 

     HasRequired(x => x.NeededTask) 
     .WithMany(y => y.Dependancies) 
     .HasForeignKey(z => z.TaskId) 
     .WillCascadeOnDelete(false); 

     HasRequired(x=>x.Task) 
     .WithMany(y=>y.NeededTasks) 
     .HasForeignKey(z=>z.NeededTaskId) 
     .WillCascadeOnDelete(false); 

     HasRequired(x => x.Task) 
     .WithMany(y => y.Dependancies) 
     .HasForeignKey(z => z.TaskId) 
     .WillCascadeOnDelete(false); 
    } 
} 

回答

0

因爲你在任何地方沒有定義主鍵?

順便說一句,它的依賴。

+0

糟糕,我更新了LoggedEntity以顯示它。 *澳大利亞拼寫:-) – 2014-10-03 09:18:19

0

原來,這個問題是由

public List<TemplateTaskDependancy> Tasks 

我TemplateTask類中不需要的收集引起的。

即外鍵表包含的對象的額外集合。

相關問題