2017-07-05 22 views
1

Azureで使用するためにローカルSQL Server 2014データベースを移行する処理中です。私はAsp.net MVCアプリケーションをIIS 8で実行しています。通常、Entity Frameworkを使用してAzure SQL Serverデータベースに接続しています。その後、Entity Framework:挿入により、ローカルではなくAzure SQLを使用したPRIMARY KEY制約違反

  1. 私はdbContext
  2. Using(... dbContext.Database.BeginTransaction())
  3. 他のエンティティが特定の1つのエンティティの追加とSaveChanges()の実行に成功
  4. 持って、私はdb.entity.add(newEntity)を行い、SaveChanges()と私は得る:

    例外: PRIMARY KEY制約 'PK_entity'の違反。オブジェクト 'dbo.entity'に重複キーを挿入できません。重複キー値は(2)です。

主キーが自動インクリメント番号であり、私はこれを実行しているユーザーのみです。このテーブルにはすでに156のレコードがあります。

奇妙なのは、ローカルSQL Serverインスタンスを使用してローカルマシンでこれを実行すると問題なく動作しますが、IISとAzure dbから実行すると、この例外が発生します。

エンティティには、他のリレーション/制約はまったくありません。

私はこのレコード(ISSとAzure)を保存しようとすると、失敗した重複キーの値が毎回1ずつ増加するという手がかりがあると思います。

+0

があります - SELECTは* thistable FROMてください? –

+1

そのテーブルからすべてのレコードを削除してから、 'add()'を実行することができます。それは、既存のデータのせいでエラーが発生していないかどうかを証明します。 – MKR

+1

テーブルDDLとEFモデルの関連部分、およびエラーの原因となったデータベーストラフィックのEFログ(db.Database.Log = m => MyLogger(m))を最小限に共有します。問題を完全に自己完結型のレシピにすることをお勧めします。あなたがそれをやっている間、おそらく問題の根本的な原因を発見するでしょう。 –

答えて

3

That's非常に奇妙な、多分アズールのBdにおけるアイデンティティ高専のインデックスは、テーブルにあなたの最後のIDより大きなインデックスに自分のアイデンティティ高専を強制することができます。1. に設定されています:SQL Serverで

ます次のIDを確認することができます。

SELECT IDENT_CURRENT ('tablename') AS Current_Identity; 

あなたは他の番号にそれを強制することができます: `このテーブルalready`で156を記録

DBCC CHECKIDENT ('tablename', RESEED, 157); 
+2

Azure SQLデータベースでDBCCコマンドをテストした後、コマンドを正常に動作させるためにIdentitycollを削除する必要があることがわかりました。 DBCC CHECKIDENT( 'tablename'、RESEED、157); – Amor

+0

ありがとうRui。 156のテーブルの場合、 'IDENT_CURRENT'が6を返しました! – Ian

+0

これは、Amor - MSFTのコメントが正しいコマンドがDBCC CHECKIDENT( 'tablename'、RESEED、157)であるため、インデックスを修正する必要があります。 –

関連する問題