14

外部キーを公開せずに1対多の関係の削除を実行すると、EFは親レコードを削除し、子レコードの外部キーをnullにしようとします。もちろん、外部キーはnull許容ではないため、これによりエラーが発生します。子クラスに外部キーを追加すると、この動作がオーバーライドされますが、公開したくありません。

たとえば、次の2つのクラスがある場合、ProjectクラスのプロパティとしてJobIdを使用したくないと思います。

public class Job : ModelBase
{
    [Required]
    [StringLength(100)]
    public string Company { get; set; }

    [Required]
    [StringLength(100)]
    public string JobTitle { get; set; }

    public ICollection<Project> Projects { get; set; }
}

public class Project : ModelBase
{
    [Required]
    [StringLength(100)]
    public string Name { get; set; }

    [Required]
    public string Summary { get; set; }

    public int JobId { get; set; }
}

関係の多くの側で外部キーを公開せずに、EFコードファーストでカスケード削除を有効にする方法はありますか?

4

1 に答える 1

14

うん!JobIdを削除し、以下を追加します。

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Job>().HasMany(j => j.Projects).WithRequired();
    }

データベースでは、これによりPK/FK関係にカスケード削除が追加されます。

(私はあなたのModelBaseが整数Id =を持っていると仮定しています)

于 2011-03-20T06:04:18.483 に答える