0

私はこのクラスを持っています(簡体字)

public class User {
    public string Username { get; set; }
    public virtual Section Section { get; set; }
}

public class Section {
    public int DepartmentNumber { get; set; }
    public virtual ICollection<User> DepartmentMembers { get; set; }
}

私が達成しようとしているのは、セクションを削除することです。このセクションに関連するすべてのユーザーは、null 値を取得する必要があります。これは、REFERENCE 制約 "FK_Users_Sections_Section" により機能しなくなりました。

これを行う正しい方法は何ですか?このセクションを削除する前に、このセクションからすべてのユーザーを削除する必要がありますか? これを行うよりエレガントな方法はありますか?私はEntityFrameworkを使用しています。

このフィールドの流暢な API:

modelBuilder.Entity<User>()
            .HasOptional(u => u.Section)
            .WithMany(s => s.DepartmentMembers)
            .Map(m =>
                m.MapKey("Section")
            )
            .WillCascadeOnDelete(false);

WillCascadeOnDelete を false に設定し、行を削除して、引数なしで行を追加してみました。

解決策は非常に単純だと思いますが、適切な説明が見つかりません(または、これまで見てきた説明が理解できないかもしれません。)

4

1 に答える 1

1

SQL Server にはカスケード削除用の SET NULL オプションがあり、削除されたレコードを参照するすべての外部キーを null に設定しますが、Entity Framework はそれを使用しません。

このオプションは、SQL Server で自分で制約に設定するか、読み込まれたエンティティを更新して Entity Framework に任せることができます。

EntityFramework で実行する場合は、更新が必要なDepartmentMembersすべてのオブジェクトがコンテキスト内にあるように、コレクションが読み込まれていることを確認する必要があります。User

Section s = context.Sections.Include(s => s.DepartmentMembers).First();
context.Delete(s);
context.SaveChanges();
于 2012-10-24T10:21:13.913 に答える