0
我知道LINQ to SQL會自動包裝數據庫事務中的所有更改。所以如果我想用另一個插入的返回ID(我的用戶表有一個AddressID,所以我添加一個新的地址記錄,然後添加一個帶有該ID的新用戶記錄),並且在插入用戶時出現問題,地址插入不會回滾。你是否應該在另一個事務中包含SubmitChanges?ASP MVC LINQ to SQLtransaction回滾
我知道LINQ to SQL會自動包裝數據庫事務中的所有更改。所以如果我想用另一個插入的返回ID(我的用戶表有一個AddressID,所以我添加一個新的地址記錄,然後添加一個帶有該ID的新用戶記錄),並且在插入用戶時出現問題,地址插入不會回滾。你是否應該在另一個事務中包含SubmitChanges?ASP MVC LINQ to SQLtransaction回滾
如果您的表具有外鍵關係,LINQ to SQL將爲您處理此問題。
如果您想使用視覺工作室DBML設計師,你可以按照下面
一拖步關聯的表到你的設計師和一個一對多realtionship將通過添加UserAddress集合屬性的建立到用戶類。
這將允許您創建一個UserAddress對象,並把它添加到您的用戶對象,然後保存用戶對象,LINQ到SQL然後將處理所需的主鍵的檢索和插入作爲交易的一部分
User user = new User();
user.FirstName = "Foo";
user.LastName = "Bar";
UserAddress userAddress = new UserAddress();
userAddress.Line1 = "22";
userAddress.Line2 = "Acacia Ave";
userAddress.Postcode = "E13 9AZ";
user.UserAddresses.Add(userAddress);
db.Users.InsertOnSubmit(user);
db.SubmitChanges();
在提交更改期間創建的sql的刪節版本中,您可以看到對錶的兩個更新都包含在一個事務中,因此如果在執行期間遇到任何故障(如果遇到任何故障)你的數據庫深入查看SQL執行)。
BEGIN TRANSACTION
INSERT INTO [dbo].[UserAddresses]([UserID], [Line1], [Line2], [Postcode]) VALUES (@p0, @p1, @p2, @p3)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
exec sp_executesql N'INSERT INTO [dbo].[UserAddresses]([UserID], [Line1], [Line2], [Postcode]) VALUES (@p0, @p1, @p2, @p3)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 int,@p1 nchar(10),@p2 nchar(10),@p3 nchar(10)',@p0=3,@p1=N'22 ',@p2=N'Acacia Ave',@p3=N'E13 9AZ '
INSERT INTO [dbo].[Users]([FirstName], [LastName]) VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]
exec sp_executesql N'INSERT INTO [dbo].[Users]([FirstName], [LastName]) VALUES (@p0, @p1)
SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 nchar(10),@p1 nchar(10)', @p0=N'Foo ',@p1=N'Bar
COMMIT TRANSACTION
夥計。太棒了。我愛這個ORM的東西!非常感謝你。 – 2010-04-13 19:41:14