2009-09-29 59 views
2

我有这个linq回滚到sql?

Public void CreateUser(params here) 
{ 
    CreateMembership(params here); 
    Users newUser = new Users(); 
    newUser.UserId = 123456 
    Context.Users.insertOnSubmit(); 
    Context.Submit(); 
} 

public void CreateMembership(...) 
{ 
    Membership membership = new Membership(); 
    membership.Something = "something"; 
    Context.Membership.insertOnSumbit(); 
    Context.Submit(); 
} 

因此,如果用户提交表失败我怎么能ROL这回删除会员的东西发生什么事?或者我可以设置我的东西不同,只需从Membership方法中删除Context.Submit()行?

那么只有一个提交被调用?还是我必须做别的事情?

回答

5

国际海事组织,你应该只打电话提交一次。

或者,我有一个方法来'清除'挂起的更改。

看一看here

+0

那么如果我理解的权利,如果它在第一次插入失败(我假设它会按顺序,所以会员)。它不会被添加,它永远不会执行用户。那个脚本我只是叫它什么的? – chobo2 2009-09-29 05:44:00

+0

噢,我使用insertOnSubmit或InsertAllOnsubmit()?我不确定差异是什么。 – chobo2 2009-09-29 05:46:35

+0

一个如果为一个对象,其他为一个对象列表。 – leppie 2009-09-29 06:03:48

2

只有在您想要绑定到单个事务中的所有更改应用于LINQToSQL上下文后,您才会调用提交。

本质上,删除Context.Submit();从CreateMembership功能,你会实现你正在寻找的结果。

+0

酷这就是我在想什么使事情变得简单可能更快。 – chobo2 2009-09-29 05:57:09

7

使用TransactionScope应该是我的建议。

using (TransactionScope ts = new TransactionScope()) 
{ 
    myContext.SubmitChanges(); 
    ts.Complete(); 
} 

它会回滚,如果从SubmitChanges()方法抛出异常。