仅更新Code First,EF 5中的标量属性

时间:2012-10-12 12:48:15

标签: entity-framework code-first

上帝的日子!

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

类别实体中的一个问题,一个类别在儿童中有另一个类别。保存有关重复键的更改时,我的方法会生成异常。我认为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);
            }
        }
    }

0 个答案:

没有答案