如何在没有数据上下文的情况下更新对象
-
03-07-2019 - |
题
实体框架为在同一个datacontext中更新数据提供了极大的灵活性
Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p)
personA.name = txtName.value
datacontext.savechanges()
如果我必须将此更新功能移动到仅采用“人员”的服务层。在请求中,什么是分配我的“人”的最佳方式。请求对象进入datacontext而不再进行深度复制?
解决方案
您需要将实体对象附加到数据上下文。
您还需要使用AttachUpdeted方法扩展数据上下文分部类。当您将对象附加到数据上下文时,它不知道已经进行了更新。下面的代码将告诉数据上下文每个属性都已更新,需要写入数据库。
public static void Save(EntityObject entity)
{
using(MyContext ctx = new MyContext)
{
ctx.AttachUpdated(entity);
ctx.SaveChanges();
}
}
public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached)
{
if (objectDetached.EntityState == EntityState.Detached)
{
object original = null;
if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original))
obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached);
else
throw new ObjectNotFoundException();
}
}
不隶属于 StackOverflow