ApplyCurrentValues 方法
原理是从指定的对象获取标量属性值,并拷贝它们到带有相同EntityKey的对象中去。任何与初始值不同的值将被标记为Modified
(我自己测试了下,是把自己改为Dettach,把带有相同EntityKey的对象Modify)
ApplyPropertyChanges 方法的使用,修改实体
使用ApplyPropertyChanges,可以使用不在集合中的实体覆盖到集合中主键对应用实体上 如果内存中没有主键对应的记录,会报错 Attach与ApplyPropertyChanges有类似之处,都是将Context集合外的[实体]与Context集合内的[实体]同步. ApplyPropertyChanges调用时,要求对应的[实体]在内存中,Attach不要求 pplyPropertyChanges调用后,集合内的实体状态会标记为EntityState.Modified Attach调用后不会修改合内的实体状态,如要SaveChanges(),要手动标记EntityState.Modified ApplyPropertyChanges是用[外部实体]全覆盖Context集合中的[实体], Attach方式,通过SetModifiedProperty()方法,可在调用SaveChanges()时,只修改只定有字段值 myContext context = new myContext(); myTab r1 = context.myTab.First(p => p.ID == 1); myTab nr = myTab.CreatemyTab(1); nr.a = "wxwinter"; Console.WriteLine(nr.EntityState); //print:Detached Console.WriteLine(r1.EntityState); //print:Unchanged context.ApplyPropertyChanges("myTab", nr); myTab r2 = context.myTab.First(p => p.ID == 1); Console.WriteLine(nr.EntityState); //print:Detached Console.WriteLine(r2.EntityState); //print:Modified context.SaveChanges();
//EntityKey
public bool DeletObj( string EntityName, int ObjID, out string ErrorMessage) { try { EntityKey ek = new EntityKey( " WhtManagerEntities1. " + EntityName, " id " , ObjID); object o = null ; if (ObjectContext.TryGetObjectByKey(ek, out o)) { ObjectContext.AttachTo(EntityName, o); ObjectContext.ObjectStateManager.ChangeObjectState(o, EntityState.Deleted); ObjectContext.SaveChanges(); ErrorMessage = "" ; return true ; } ErrorMessage = " 找不到实体 " ; return false ; } catch (Exception ex) { ErrorMessage = ex.Message; return false ; } }
转载于:https://www.cnblogs.com/renjuwht/archive/2010/07/17/1779346.html
