例如: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中有某个方法可以让我定义执行的方式,望知道的人说下。
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中有某个方法可以让我定义执行的方式,望知道的人说下。
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();加了红色这句呢?
entities.SaveChanges();
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();
自己用事件封装好,进去后自动实例化test.TestContext,用一个参数来判断是否打开事务,方法执行完毕,最后提交事务