实体框架为在同一datacontext中更新数据提供了极大的灵活性
Dim personA = (from p in datacontext.Person where p.PersonID = 1 select p) personA.name = txtName.value datacontext.savechanges()
如果我必须将此Update函数移动到仅在请求中使用"Person"的Service层,那么将"Person"请求对象分配到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(); } }
第1
条第2条