5

IDをオフにして、自分の値を挿入しようとしています。

  1. ID列 のプロパティStoredGeneratedPattern値をに変更しましたNone
  2. xml形式で開くことにより、プロパティStoredGeneratedPattern値をNoneEDMXファイルに変更しました

以下のコードを使用してみました

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
   int k = Context.ExecuteStoreCommand("SET IDENTITY_INSERT dbo.client ON");
   Context.ClientInfoes.Add(testclient);
   result = Context.SaveChanges();
   int j = Context.ExecuteStoreCommand("SET IDENTITY_INSERT dbo.client OFF");
   scope.Complete();
}

しかし、私はまだエラーを受け取っています

IDENTITY_INSERTがOFFに設定されている場合、ID列の明示的な値をテーブルに挿入できません

私は何かが足りないのですか?他に選択肢はありますか?

4

2 に答える 2

0

データは、ClientInfoes.Add または Context.SaveChanges を呼び出すときではなく、TransactionScope.Complete を呼び出すときにデータベースに格納されます。したがって、insert ステートメントが呼び出された時点で、IDENTITY INSERT がオフに切り替えられていることがわかります。

単純に並べ替えて...

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
   int k = Context.ExecuteStoreCommand("SET IDENTITY_INSERT dbo.client ON");
   Context.ClientInfoes.Add(testclient);
   result = Context.SaveChanges();
   scope.Complete();
   int j = Context.ExecuteStoreCommand("SET IDENTITY_INSERT dbo.client OFF");
}

IDENTITY_INSERT の値はセッション固有であるため、IDENTITY_INSERT に対するすべての変更はトランザクションの外部で行ってください (セッションごとに 1 つのテーブルに対してのみ有効にすることができます)。

于 2012-12-21T11:12:14.220 に答える