Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Linq To Sql e identity_insert

Un'altra opzione è racchiudere tutte le tue chiamate Linq2Sql in un TransactionScope(). Questo dovrebbe costringerli a funzionare tutti nella stessa connessione.

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();
       }
       // ...

Tuttavia, se stai cercando di fare qualcosa come:

context.ExecuteCommand("SET IDENTITY_INSERT MyTable ON");
context.MyTable.InsertOnSubmit(myTableObject)
context.SubmitChanges()
context.ExecuteCommand("SET IDENTITY_INSERT MyTable OFF");

probabilmente incontrerai altri problemi, specialmente se la colonna identity ha l'attributo IsDbGenerated impostato su true. Il comando SQL generato da Linq2Sql non saprà includere la colonna e il valore dell'identità.