Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Linq vers Sql et identity_insert

Une autre option consiste à encapsuler tous vos appels Linq2Sql dans un TransactionScope(). Cela devrait les forcer tous à s'exécuter dans la même connexion.

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

Cependant, si vous essayez de faire quelque chose comme :

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

vous rencontrerez probablement d'autres problèmes, en particulier si la colonne d'identité a l'attribut IsDbGenerated défini sur true. La commande SQL générée par Linq2Sql ne saura pas inclure la colonne et la valeur d'identité.