2

神の日!

エンティティのツリーがあり、特定の時点で、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);
            }
        }
    }
4

0 に答える 0