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.TaskTask.Dependanciesいるため、両方の関連付けに対して 1 つずつ、2 つの外部キー フィールドを作成します。両方の関連付けが対応するものであることを 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 に答える