上帝的日子!
我有一个实体树,在特定的时间点,我只需要更新一个实体的标量属性。经典更新提升整个图表查找,但关系不需要更新。
类别实体中的一个问题,一个类别在儿童中有另一个类别。保存有关重复键的更改时,我的方法会生成异常。我认为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);
}
}
}