C# 使用上一次插入中的标识进行多个LINQ到SQL插入
我想尝试插入到SQL Server数据库中的多个表中,但我的第一次插入会生成一个外键,该外键是我希望在后续插入中使用的标识值。我不确定如何在LINQtoSQL中实现这一点。我想我可以在多个交易中完成,但我更喜欢在一个地方完成。。。aka在using子句中 我的伪代码算法如下:C# 使用上一次插入中的标识进行多个LINQ到SQL插入,c#,sql-server,linq,C#,Sql Server,Linq,我想尝试插入到SQL Server数据库中的多个表中,但我的第一次插入会生成一个外键,该外键是我希望在后续插入中使用的标识值。我不确定如何在LINQtoSQL中实现这一点。我想我可以在多个交易中完成,但我更喜欢在一个地方完成。。。aka在using子句中 我的伪代码算法如下: 检查TABLE1.COL2列中是否存在ID值 如果不存在,则在表1中插入新行 从TABLE1.COL1列中获取新插入行的外键值 使用新外键值创建对象并更新表2 using (var sms = new SmsDataDa
using (var sms = new SmsDataDataContext(connection_string)
{
foreach(SomeObject i in ListofObject)
{
TABLE1 t1 = CheckID(sms, i.ID);
if (t1== null)
{
TABLE1 new_row = new TABLE1();
sms.TABLE1.InsertOnSubmit(new_row);
//Ideally I want to do something like this even though i dont think it will work.
sms.SubmitChanges();
TABLE2 update_row = new TABLE2();
update_row.ID = new_row.COL1.value; //has the newly created identity value from my last insert.
//Assume this update_row exist in my TABLE2 table.
sms.TABLE2.InsertOnSubmit(update_row);
}
}
sms.SubmitChanges();
}
您可以使用
TransactionScope
只需将整个数据库调整块包装在其中,如下所示:
using (var MyTran = new TransactionScope())
{
try{
//Insert #1
//Insert #2
...
MyTran.Complete();
}catch{
// if the flow of control comes here, transaction will not be committed
}
}
如您所见,如果您的代码在Complete()执行之前执行,则会得到回滚
参考资料
using (var sms = new SmsDataDataContext(connection_string)
{
foreach(SomeObject i in ListofObject)
{
TABLE1 t1 = CheckID(sms, i.ID);
if (t1== null)
{
TABLE1 new_row = new TABLE1();
sms.TABLE1.InsertOnSubmit(new_row);
TABLE2 update_row = new TABLE2();
new_row.Table2s.Add(update_row);
}
}
sms.SubmitChanges();
}