神の日!
エンティティのツリーがあり、特定の時点で、1 つのエンティティのスカラー プロパティのみを更新する必要があります。古典的な更新では、グラフのルックアップ全体が上昇しますが、関係を更新する必要はありません。
あるカテゴリが子に別のカテゴリを持っているカテゴリ エンティティの問題。私のメソッドは、重複キーに関する変更を保存するときに例外を生成します。EF は子供をデータベースに追加しようとしていると思います。
以下にリストされている私のデータコンテキストの静的メソッド:
public static void Update<T>(T item) where T : KeyedObject
{
if (item == null)
throw new ArgumentNullException("Item to update is null");
item.ValidateIsNotNew();
using (DataContext db = new DataContext())
{
T original = GetOriginalWithException<T>(db, item);
DbEntityEntry entry = db.Entry(original);
entry.CurrentValues.SetValues(item);
entry.State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (Exception ex)
{
throw new DatabaseException(
"Cant update list item. See inner exception for details.",
ex);
}
}
}
別の方法を試します: オブジェクトを添付します。このメソッドは例外をスローしませんが、グラフ全体を更新し、多くのリソースを消費します。以下にリストされているコード:
public static void Update<T>(T item) where T : KeyedObject
{
if (item == null)
throw new ArgumentNullException("Item to update is null");
item.ValidateIsNotNew();
using (DataContext db = new DataContext())
{
db.Set<T>().Attach(item);
db.Entry(item).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (Exception ex)
{
throw new DatabaseException(
"Cant update list item. See inner exception for details.",
ex);
}
}
}