2

上帝的一天!

我有一棵实体树,在特定时间点我只需要更新一个实体的标量属性。经典更新上升整个图查找,但关系不需要更新。

类别实体中的麻烦是一个类别在子类别中有另一个类别。保存有关重复键的更改时,我的方法会生成异常。我认为 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