我需要使用实体框架4.1(POCO)在单击按钮上单击更新100条记录。我需要将修改后的记录保存到数据库中,而不进行数据库往返(以避免性能问题)。在实体框架中更新记录的最佳做法是什么?
我已经看到一些解决方案与附加。
得到错误的附加 一个实体对象不能被IEntityChangeTracker的多个实例
所以尝试分离第一次引用,得到了新的错误 对象不能被分离,因为它没有连接到ObjectStateManager
我使用存储库模式来获取实体列表并传递到UI层绑定在gri d。
在按钮点击,我传递这些实体返回DB层更新。
它工作正常,选择实体并执行context.applychanges。我需要避免这种往返行程,以解决性能问题。
public void Update(OPRPortCall portCall)
{
using (VMEntities context = new VMEntities())
{
context.Detach(portCall); //The object cannot be detached because it is not attached to the ObjectStateManager.
context.AttachTo("OPRPortCalls", portCall); //An entity object cannot be referenced by multiple instances of IEntityChangeTracker
context.ObjectStateManager.ChangeObjectState(portCall, EntityState.Modified);
context.SaveChanges();
}
}
向我提供任何解决方案。
克里斯托弗
你能后的更新代码?特别是,当你打开和关闭dbcontext。 – 2013-02-21 11:07:06
“所以先尝试分离,得到新的错误” - 您需要将它从它所连接的上下文中分离出来。它不会附加到新的上下文中,因此将它从新的上下文中分离出来并不是也不行。但是如果你仍然有旧的上下文(并且你做了,否则该实体不能被附加到它),为什么不直接在这个旧的上下文中调用'SaveChanges()'? – hvd 2013-02-21 11:22:27
dtryon更新了代码。请检查。 – ChristopherJ 2013-02-21 11:22:53