2 つの POCO クラス (以下) があり、2 つのレコード間のリンクを削除したいと考えています。このEF 5.0によると、次のように User クラスをロードせずに削除を処理できるはずです。
context.Computers.Find("test").User = null;
context.SaveChanges();
これは機能しませんが、.net 4 承認済みの方法を使用すると機能します。
en = context.Computers.Find("test");
context.Entry(en).Reference(e => e.User).Load();
en.User = null;
context.SaveChanges();
私の EF リファレンスは EntityFramework.dll バージョン 5.0.0.0 です。ここで明らかな何かが欠けていますか?
クラスは次のとおりです。
public class Computer
{
public string Id { get; set; }
public Nullable<int> UserId { get; set; }
public virtual User User { get; set; }
}
public class User
{
public int Id { get; set; }
public virtual ICollection<Computer> Computers { get; set; }
}
編集:上記のリンクされた記事の特定の行は、私が見ている機能と一致していないようです:
リレーションシップを削除するには、ナビゲーション プロパティを null に設定します。.NET 4.0 に基づく Entity Framework を使用している場合は、関連する end を null に設定する前に読み込む必要があります。例えば:
context.Entry(course).Reference(c => c.Department).Load();
course.Department = null;
.NET 4.5 に基づく Entity Framework 5.0 以降では、関連する end を読み込まずに関係を null に設定できます。