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; }
}

我希望依赖表只包含以下字段;

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);
    }

但仍会创建不需要的字段。

4

1 回答 1

1

实体框架不知道这一点Dependancy.Task并且Task.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);
于 2013-01-23T23:00:49.330 回答