Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Linq To Sql dan identity_insert

Pilihan lain adalah untuk membungkus semua panggilan Linq2Sql Anda dalam TransactionScope(). Ini akan memaksa mereka semua untuk berjalan dalam koneksi yang sama.

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

Meskipun, jika Anda mencoba melakukan sesuatu seperti:

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

Anda mungkin akan mengalami masalah lain, terutama jika kolom identitas memiliki atribut IsDbGenerated yang disetel ke true. Perintah SQL yang dihasilkan oleh Linq2Sql tidak akan tahu untuk menyertakan kolom identitas dan nilai.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara yang baik untuk menggunakan alias tabel dalam pernyataan Perbarui?

  2. Dapatkan daftar dengan nilai awal dan akhir dari tabel datetimes

  3. Menambahkan kolom ke semua tabel pengguna di t-sql

  4. Streaming langsung ke database

  5. Konsep utama penguncian SQL Server