sql >> データベース >  >> RDS >> Sqlserver

LinqToSqlおよびidentity_insert

    もう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列と値を含めることを認識しません。



    1. Power BIクエリエディターでの列のピボット、ピボット解除、および分割

    2. 時間(タイムゾーン付き)が指定された時間範囲内にあるかどうかを確認します

    3. MySQL時間ベースのトリガー

    4. 別のテーブルからAUTO_INCREMENTを設定する方法