2016-09-13 4 views
1

DBテーブルproductsに5列あります。 Idが主キーです。 SQL Server Management Studioで、あなたは明らかに、ここで、この見ることができます:SQL Serverはキー以外のプロパティに対して「重複キー」エラーを表示しますか?

screenshot 1

私はproductId = 69とName = "芝生ダーツ" を持っています。 Id = 420とName = "Lawn Darts"という新製品を挿入しようとしています。私はアイデンティティの挿入を使用しようとしているので、挿入された製品のIDを指定することができます。名前は同じですが、Idは異なります。これは問題ないはずです。

私はLINQ - > SQLを使用してC#コンソールアプリケーションに挿入しています。私は同じNameで何かが異なるIdを挿入しようとすると、私は次のようなエラーメッセージが出ます:

をユニーク インデックス「IX_Name」のオブジェクト「dbo.Products」には重複するキー行を挿入できません。重複するキー値は(Lawn Darts)です。

なぜ、非キーですか?

+0

あなたは間違いなくあなたの名前]列に一意のインデックス(IX_Name)を持っています。それはエラーです。あなたのテーブルのSSMSで開いているKeysフォルダを見てください。 2番目のエラーは、独自の値をID列に挿入できないことを示しています。それを行うには、これを有効にする必要があります: 'SET IDENTITY_INSERT TableName ON'そして、完了したら' OFF'に設定します。 – rook

+0

@rookうん、あなたは正しい。私はちょうど間違った設定を探していた。通常の列のプロパティを表示するのではなく、列を右クリックして 'Indexes/Keys ... 'をクリックしなければなりませんでした。 'product'が定義されているC#コードでは、明らかに' IsUnique'アノテーションもあります。彼らの最初を見ていたはず... – AlbatrossCafe

答えて

2

これは私が作っていたよりずっと簡単でした。ポインタのための@rookのおかげです。

Nameの列がプライマリキーではないにもかかわらず、「ユニークインデックス」であることが指定されました。私はSQL Server Management Studioで間違った設定を探していたので、それを逃しました。私は "プロパティ"を探していた。私がする必要があったのは、「名前」列を右クリックし、「索引/キー...」オプションを選択することでした。これにより、属性Is Uniqueを「いいえ」にすることができるウィンドウが表示されます。

screenshot

Iをコード最初の移行を使用していますので、別の方法として、私はそれはC#で定義されているプロパティからデータアノテーションを削除し、この経路を介してDBを更新するために進むことができます。前

[Index(IsUnique = true)] 
[MaxLength(255)] 
public string Name { get; set; } 

後:

[MaxLength(255)] 
public string Name { get; set; } 
関連する問題