例如:User 表;主键 ID
test.TestContext ct = new test.TestContext();
var r = ct.User.Where( p => p.ID == "test" ).First();
ct.DeleteObject( r );
test.User user = new test.User();
user.ID = "test";
ct.AddToUser( user );
ct.SaveChanges();在保存时,我查了下执行顺序,竟然是先执行Add然后再执行Delete,这样就导致Add时主键冲突。
按道理这种应用应该是比较常见的是使用方式,但我怎么想不明白为什么会先Add,EF直接按状态的修改先后顺序执行就是的了,偏偏还要自己按某个顺序来执行。又或者EF中有某个方法可以让我定义执行的方式,望知道的人说下。

解决方案 »

  1.   

    test.TestContext ct = new test.TestContext(); 
    var r = ct.User.Where( p => p.ID == "test" ).First(); 
    ct.DeleteObject( r ); 
    ct.SaveChanges();
    test.User user = new test.User(); 
    user.ID = "test"; 
    ct.AddToUser( user ); 
    ct.SaveChanges();加了红色这句呢?
      

  2.   

    entities.DeleteObject(r);
    entities.SaveChanges();
      

  3.   

    那为什么不直接吧该角色原有权限给更新就可以了?System.Data.Common.DbTransaction tran = null;
    test.TestContext ct = new test.TestContext(); 
    ct.Connection.Open();
    tran = ct.Connection.BeginTransaction();
    var r = ct.User.Where( p => p.ID == "test" ).First(); 
    ct.DeleteObject( r ); 
    ct.SaveChanges(); 
    test.User user = new test.User(); 
    user.ID = "test"; 
    ct.AddToUser( user ); 
    ct.SaveChanges(); 
    tran.Commit();
      

  4.   

    存储过程~个人有个思路- -很囧
    自己用事件封装好,进去后自动实例化test.TestContext,用一个参数来判断是否打开事务,方法执行完毕,最后提交事务