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 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();
就可以同时保存两张表数据
但愿能帮助你