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

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 来进行事务回滚,代码如下:
----------------------------------……


如果表之间有主外键关系的话,是可以的
 AccountData ad = new AccountData { Name = "jack",Password="1234");
 db.AccountData.AddObject(ad);
 AccountDetailData add = new AccountDetailData(AccountId = ad.Id, Realname="超人");
 AccountData.AccountDetailData.AddObject(add);
 db.SaveChanges();
就可以同时保存两张表数据

但愿能帮助你