もう1つのオプションは、すべてのLinq2Sql呼び出しをTransactionScope()でラップすることです。これにより、すべてが同じ接続で実行されるようになります。
using System.Transactions; // Be sure to add a reference to System.Transactions.dll to your project.
// ... in a method somewhere ...
using (System.Transaction.TransactionScope trans = new TransactionScope())
{
using(YourDataContext context = new YourDataContext())
{
context.ExecuteCommand("SET IDENTITY_INSERT MyTable ON");
context.ExecuteCommand("yourInsertCommand");
context.ExecuteCommand("SET IDENTITY_INSERT MyTable OFF");
}
trans.Complete();
}
// ...
ただし、次のようなことをしようとしている場合:
context.ExecuteCommand("SET IDENTITY_INSERT MyTable ON");
context.MyTable.InsertOnSubmit(myTableObject)
context.SubmitChanges()
context.ExecuteCommand("SET IDENTITY_INSERT MyTable OFF");
特にID列のIsDbGenerated属性がtrueに設定されている場合は、おそらく他の問題が発生する可能性があります。 Linq2Sqlによって生成されたSQLコマンドは、ID列と値を含めることを認識しません。