3

多くの調査の結果、EntityFramework4.4は一意の制約をサポートしていないようです。はい、それはデータベースで実行でき、実行する必要がありますが、モデル検証で実行することを強くお勧めします。これにより、ユーザーへの警告がよりきれいになります。

プログラマーが[Unique]属性でプロパティを装飾できることが理想的であり、それはどういうわけか可能であるはずです。

public class UserGroup
{

    public int UserGroupID { get; set; }

    [Required]
    [Unique]
    public string Name { get; set; }

    [Required]
    public string Description { get; set; }

}

私が検討しているオプション:

1)リポジトリにSaveChanges()で追加の作業を行わせ、変更されたエンティティの[Unique]属性をスキャンし、データベースにアクセスして一意性を確認します。欠点:この検証は、SaveChanges()を呼び出したときにのみ発生します。理想的には、より早く(たとえば、UIコントロールが検証したときに)発生する可能性があります。

2)UserGroupモデルに遅延ロードされたナビゲーションプロパティをAllUserGroupsに付与します。

public virtual ICollection<UserGroup> AllUserGroups { get; set; }

次に、UniqueAttribute {}をプログラムして、このプロパティをスキャンし、値などを確認します。

質問:この「ナビゲーションプロパティ」にすべてのレコードをロードするようにEntity Framework(コードファースト)を構成するにはどうすればよいですか?外部キーなどを使用したナビゲーションプロパティだけが必要なようですが、すべてが必要なだけです。

3)UIでこの検証を手動でコーディングします-ひどく絶対的な最後の手段です。

質問:モデルレベルでの検証を介して一意性制約を適用するためのより良いオプションはありますか?

よろしく、-ブレンダン

4

1 に答える 1

3

私はこれを見つけました、あなたが探しているもののようです:

データベース内の他の行に対して一意のフィールドを検証する UniqueAttribute (DataAnnotations.ValidationAttribute を継承)

于 2013-04-14T13:52:56.383 に答える