2

非常に単純な構造です。Entity Frameworkでユニークインデックスを追加するとデータテーブルの表示が妨げられる

は罰金働いていたが、私はそうのような複合一意のインデックスを追加することによって、一意性を強制したい:私はその後、削除 enter image description here

:私はそれがエラーを生成する新しいレコードを入力するときは、この後

CreateIndex("dbo.Fixtures", new[] { "MarketId", "BookName", "CoupName" }, unique: true, name: "IX_UniqueFixture"); 

を新しく追加された索引を削除し、索引が追加された後に追加されたレコードを削除し、索引の追加に先立つレコードを表示しました。

enter image description here

エラーメッセージの下に示すレコードが前の添加に存在していたレコードである:私はそれが同じエラーに戻し、新しいレコードとデータベースを更新するために、再度試みが

、前述の指数。ように、親ルックアップテーブルId列を再播種後の今

- それは

USE [aspnet-Arb-20160906102730] 

に動作しますGO
DBCC CHECKIDENT( 'ExchangeTypes'、RESEED、7) GO

、それが再び可能に私は、新しいレコード

enter image description here

そうでを追加します私はレコードの表示を可能にするために、ユニークなコンポジットインデックスを追加することによって、データテーブルの混乱から回復することができました。

しかし、なぜこれが起こっているのか困惑しています。そして私はまだ一意性を徹底させたいと思っています。たぶん私は3つのフィールドを1つのフィールドに連結し、いくつかのフィールドではなく単一のフィールドにインデックスを持つ一意性を強制して、それがデータテーブルの表示に干渉しないかどうかを調べるかどうかを確認します。

EDIT:1つのフィールドの索引で一意に試しましたが、それでも同じエラーが表示されます。親ルックアップフィールドにユニークなインデックスを適用しても、データテーブルは機能しませんが、子テーブルで同じことを試みることはありません。

答えて

0

EDIT 3はLIKEが、私はこれがそう愚かな予測できない、それだけで自動増分自身の世話をし、それは、そのような法外な効果を持っているでしょう想像もしなかっただろう。この考え方のようで知らなかった回避策

WITH解決できるLOOKSデータテーブルの行には表示されますが、レコードの削除とその後の追加で一度だけテストしたので、何らかの理由でブレークしない限り、初期テストで動作する可能性があります。誰かがそれの底に到達し、よりよい解決策を提供しない限り、指はそれを横切って適切な作業です。

削除を実行するたびにこのコードを実行する必要があります。最大のID値をPKの現在のID値と同じにリセットします。すべての削除後のID列下図のように:

DECLARE @maxIdentityETValue INT 
DECLARE @maxIdentityFValue INT 

SET @maxIdentityETValue = (SELECT MAX(Id) FROM ExchangeTypes) 
DBCC CHECKIDENT('ExchangeTypes', RESEED, @maxIdentityETValue) 

SET @maxIdentityFValue = (SELECT MAX(Id) FROM Fixtures) 
DBCC CHECKIDENT('Fixtures', RESEED, @maxIdentityFValue) 

DBCC CHECKIDENT ('ExchangeTypes', NORESEED) 
DBCC CHECKIDENT ('Fixtures', NORESEED) 

EDITは解決していない2。

レコードを削除して追加した後、削除するとそれ以降の追加は許可されません。 :

アイデンティティが生成したID値のステップアップを参照してください - 問題の原因となっているものです - 削除した後でその番号を再読していないと、その後レコードを追加する前に新しいレコードが表示されます。それらは、さらにレコードを削除すると、その後、それはまだレコードを表示からのDataTableを防止し、上記のエラーが表示されているレコードを追加する前に

腹立たしい - 。誰かが私を助けてください

enter image description here


を! 0

EDIT 1:解決済み。まあまあ。

少なくともユニークなインデックスを追加するときは、親と子のPKアイデンティティ生成ID値の両方を再シードして、データセットが機能するようにする必要があります。

私に理由を聞かないでくださいが、それだけで動作します。

親と子のそれぞれのインデックスに私の一意の強制制約を追加することに加えて、両方のID列を再ソートした後、データベースに新しいレコードを追加できるようになりました。

関連する問題