2012-03-15 19 views
0

这是我的问题, 我想从我刚刚插入的ID中获取ID,并将其用作另一个表的外键。LINQ to SQL读取ID只需插入并回滚

Records record = new Records { 
    field1 = 1; 
    field2 = 2; 
}; 
DataContext.Records.InsertOnSubmit(record); 
DataContext.SubmitChanges(); // transaction 1 
int recordID = record.ID; 

tblDEMO demo = new tblDEMO { 
    rID = recordID 
    field1 = 1; 
}; 
DataContext.tblDEMOs.InsertOnSubmit(demo); 
sparxdc.SubmitChanges(); // transaction 2 

我的问题是,如果我这样做,它会创建2个交易。如果第二个失败,我该如何回滚第一个?

回答

0

如果确定与一个事务中双方的提交:

using (TransactionScope scope = new TransactionScope()) 
{ 
    try 
    { 
     perform first submit 
     perform second submit 
    } 
    finally 
    { 
     scope.Complete(); 
    } 
} 
+0

优秀。有没有更好的方法来做到这一点(没有2提交)? – etlds 2012-03-15 20:30:30

0

添加任何号码的呼叫来InsertOnSubmit /删除方法,当所有的变化进行调用的SubmitChanges。在一个TransactionScope中手动创建Transaction。

+0

但是我必须在插入到另一个表之前阅读ID。这就是为什么我有两次SubmitChanges()。 – etlds 2012-03-15 21:12:02

0

可能,如果你的实体相关的(如果在数据库中的关系),你可以赚那么

var order = new Order(); 
Order.Customer = new Customer(); // here both order and customer represent your entities 
dbContext.InsertOnSubmit(); 
dbContext.SubmitChanges(); 

你能给一些更多的信息?

+0

是的,他们是相关的。我的演示有一个与记录表ID相关的外键。 – etlds 2012-03-16 12:39:16

0

好的,我现在知道该怎么做。 插入2个与外键相关的表,我们需要这样做。

Customer customer = new Customer(); 
Order order = new Order(); 
customer.Order.Add(order); 
DataContext.Customer.InsertOnSubmit(customer);