Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Linq To Sql i identity_insert

Inną opcją jest zawinięcie wszystkich wywołań Linq2Sql w TransactionScope(). Powinno to zmusić je wszystkie do działania w tym samym połączeniu.

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

Chociaż, jeśli próbujesz zrobić coś takiego:

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

prawdopodobnie napotkasz inne problemy, zwłaszcza jeśli kolumna tożsamości ma atrybut IsDbGenerated ustawiony na wartość true. Polecenie SQL wygenerowane przez Linq2Sql nie będzie wiedziało, czy zawierać kolumnę tożsamości i wartość.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak wygenerować skrypty dla wszystkich tabel jednym pociągnięciem w SQL Server 2000?

  2. Różnica między Equi-Join i Inner-Join w SQL

  3. DevOps:DBA lub programista – jak zachować równowagę

  4. Zwracanie wielu tabel z procedury składowanej

  5. eksport z serwera sql do pliku Excel za pomocą asp.net i vb.net?