日期:2014-05-20  浏览次数:20891 次

Entity Framework 事务求教
有两个表,一个是用户主表 AccountData ,一个是用户明细表 AccountDetailData ,我新建了一个 edmx 文件,把这两个表放了进去。我要进行的操作是插入一个新用户。我用 TransactionScope 来进行事务回滚,代码如下:
-------------------------------------------- 
using(TransactionScope ts = new TransactionScope())
{
  AccountData ad = new AccountData { Name = "jack",Password="1234");
  db.AccountData.AddObject(ad);
  try
  {
  db.SaveChanges();
  AccountDetailData add = new AccountDetailData(AccountId = ad.Id, Realname="超人");
  db.AccountDetailData.AddObject(add);
  db.SaveChanges();
  ts.Complete();
  }
  catch(){}
}
----------------------------------------
这样写事务是有效的,但我必须使用第一个 db.SaveChanges() 之后,才能获得 ad 的 Id,否则 ad.Id 是空的,不能插入用户明细表。

我的问题是:是不是有办法可以只打开一次数据库(我理解为只是用一次SaveChanges方法),完成以上操作呢?有些时候事务要涵盖四、五个表,都要 SaveChanges() 一次,总觉得很不科学 -_-;; 

求各位大虾指教指教,谢谢。



------解决方案--------------------
探讨
有两个表,一个是用户主表 AccountData ,一个是用户明细表 AccountDetailData ,我新建了一个 edmx 文件,把这两个表放了进去。我要进行的操作是插入一个新用户。我用 TransactionScope 来进行事务回滚,代码如下:
----------------------------------……