【发布时间】:2014-03-26 00:39:14
【问题描述】:
我正在使用以下代码使用从我的代码中收集的新信息更新实体对象。我正在使用 Entity Framework 5。
我使用以下扩展方法(作为我在 EF4 中使用的重新附加代码的替代方法):
public static void ApplyValues(this object currentObject, object sourceObject, System.Data.Entity.DbContext obj)
{
obj.Entry(currentObject).CurrentValues.SetValues(sourceObject);
}
问题在于,当调用此方法时,SetValues 方法会尝试修改附加对象上的EntityKey 值(显然我不希望它这样做),因此会引发错误。
我想这里有两个问题:
有没有办法阻止它尝试更新键值?
如果不是,我该如何复制过去在 EF4 中正常工作的
ObjectContext.ApplyCurrentValues()代码?
----更新----
我之前用于EF4的代码如下:
public static System.Data.Objects.DataClasses.EntityObject ReAttach(this System.Data.Objects.ObjectContext obj, System.Data.Objects.DataClasses.EntityObject objectDetached)
{
if (objectDetached.EntityKey != null)
{
object original = null;
if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
{
objectDetached = obj.ApplyCurrentValues(objectDetached.EntityKey.EntitySetName, objectDetached);
return objectDetached;
}
else
{
throw new ObjectNotFoundException();
}
}
else
{
return objectDetached;
}
}
【问题讨论】:
-
我会感兴趣的是,您使用 EF 4 和
ObjectContext的相应代码到底是什么样子的。同样使用ObjectContext,您要么会得到相同的异常,要么会更新currentObject以外的另一个实体(请参阅下面的答案)。我不知道像您在问题中尝试的更新程序如何与ObjectContext一起使用。
标签: c# entity-framework-5