zoukankan      html  css  js  c++  java
  • 在不同的ObjectContext中更新数据

    第一个using中获取一些数据

    User u;
    using (var db = new Entities())
    {
        u = db.Users.First();
    }

    在using外改变

    u.NickName += "ABC";

    在第二个using中把改变更新到库

    using (var db = new Entities())
    {
        ……
        db.SaveChanges();    
    }

    在网上看了一些使用ApplyPropertyChanges()做的(此方法已过时,被标记为Browsable(false),可以使用新的ApplyCurrentValues),不过在apply之前,要先从库里把要改变的数据查出来(通过EntityKey查)这样会增加一次读库操作

    保存的是这个刚查出来的,而不是之前上下文查出来的。


    可以使用Attach附加,但是附加之后状态会变成Unchanged

    这个时候需要手动改state,不能直接改,只有get没有set

    db.ObjectStateManager.ChangeObjectState(obj, EntityState.Modified);
    要通过state manager改。
    改后save即可
    用apply的方式
      1: using (var db = new Entities())
    
      2: {
    
      3:     Console.WriteLine("到第二个上下文中" + u.EntityState + "," + u.NickName);
    
      4: 
    
      5:     var u2 = db.GetObjectByKey(u.EntityKey) as User;
    
      6:     Console.WriteLine("在第二个中查出" + u.EntityState + ",1:" + u.NickName);
    
      7:     Console.WriteLine("在第二个中查出" + u2.EntityState + ",2:" + u2.NickName);
    
      8: 
    
      9:     db.Users.ApplyCurrentValues(u);
    
     10:     Console.WriteLine("在第二个中apply" + u.EntityState + ",1:" + u.NickName);
    
     11:     Console.WriteLine("在第二个中apply" + u2.EntityState + ",2:" + u2.NickName);
    
     12: 
    
     13:     db.SaveChanges();
    
     14:     Console.WriteLine("保存后" + u.EntityState + ",1:" + u.NickName);
    
     15:     Console.WriteLine("保存后" + u2.EntityState + ",2:" + u2.NickName);
    
     16: }
    image 

    用attach的方式
      1: using (var db = new THZlocalEntities())
    
      2: {
    
      3:     db.Attach(u);
    
      4:     Console.WriteLine("附加后" + u.EntityState + "," + u.NickName);
    
      5: 
    
      6:     db.ObjectStateManager.ChangeObjectState(u, EntityState.Modified);
    
      7:     Console.WriteLine("改变状态" + u.EntityState + "," + u.NickName);
    
      8: 
    
      9:     db.SaveChanges();
    
     10: 
    
     11:     Console.WriteLine("保存" + u.EntityState + "," + u.NickName);
    
     12: 
    
     13: }
    image 

  • 相关阅读:
    10
    9
    8
    第七章
    第五章
    第六章
    android深度探索第四章
    android深度探索第三章
    android深度探索第二章
    android深度探索第一章
  • 原文地址:https://www.cnblogs.com/czcz1024/p/2196246.html
Copyright © 2011-2022 走看看