コードから、POCOを使用することが明らかになります。別のキーを使用する必要はありません。juFoのようにインデックスを追加できます。
this.Property(p => p.UserName)
.HasColumnAnnotation("Index", new IndexAnnotation(new[] {
new IndexAttribute("Index") { IsUnique = true }
}
));
これは、次のSQLスクリプトを作成します:あなたは次のようになります。代わりに、UserNameプロパティをあなたの列の注釈を帰するの流暢APIを使用している場合
あなたが持つ複数のユーザーを挿入しようとすると
CREATE UNIQUE NONCLUSTERED INDEX [Index] ON [dbo].[Users]
(
[UserName] ASC
)
WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
SORT_IN_TEMPDB = OFF,
IGNORE_DUP_KEY = OFF,
DROP_EXISTING = OFF,
ONLINE = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
) ON [PRIMARY]
同じUserNameを使用すると、次のメッセージでDbUpdateExceptionが発生します。
Cannot insert duplicate key row in object 'dbo.Users' with unique index 'Index'.
The duplicate key value is (...).
The statement has been terminated.
また、バージョン6.1より前のEntity Frameworkでは使用できません。
この解決策には注意してください。 'UserName'プロパティに' Key'属性を追加すると 'UserName'プロパティがデータベースの主キーになります。 'UserId'プロパティだけが' Key'属性でマークされるべきです。このソリューションは、誤ったデータベース設計をしながらプログラミング側で「正しい」動作を提供します。 –
funny -10 accepted answer :) –