14

外部キーを公開せずに1対多の関係を削除すると、EFによって親レコードが削除され、子レコードの外部キーがnullになります。これはもちろん、外部キーがNULL可能でないためにエラーが発生します。子クラスに外部キーを追加すると、この動作がオーバーライドされますが、むしろ公開しないでください。外部キーを公開せずにEFコードでカスケード削除を有効にする

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

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コードファーストでカスケード削除を有効にする方法はありますか?

答えて

14

JobIdを削除し、次の行を追加します。

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

データベースでは、これはPK/FKの関係で、削除カスケードを追加します。

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

+0

パーフェクトです。ありがとう! –

+0

私が明白と呼ぶものではない... –

関連する問題