コンテキストを保存する前に検証エラーをチェックしたいと思います。 私はcontext.GetValidationErrors()を呼び出していますが、これは空です。次にcontext.SaveChanges()を呼び出すと、私のユニークなインデックスの重複行のエラーが出ます。Entity Framework GetValidationErrorsがユニークインデックスのために空です
using(var context = new DefaultDbContext())
{
var user = new User()
{
OSIdentity = "test"
};
var duplicateUser = new User()
{
OSIdentity = "test"
};
context.Users.Add(user);
context.Users.Add(duplicateUser);
// this is empty
var errors = context.GetValidationErrors();
if(errors.Count == 0)
{
// this throws the exception for duplicate row for unique index "Idx_UserOSIdentity"
context.SaveChanges();
}
}
マイユーザエンティティは、次の列があります。
[Index("idx_UserOSIdentity", IsUnique = true)]
[Display(Name = "OSIdentity")]
[Required(AllowEmptyStrings = false, ErrorMessage = "...")]
[StringLength(450, ErrorMessage = "...")]
public string OSIdentity { get; set; }
はなぜユニークインデックスがcontext.GetValidationErrors()が呼び出されたときにチェックされていないが、しかしcontext.SaveChangesに、その後スローされますか()?
[Index]フラグはSystem.ComponentModel.DataAnnotations名前空間にありますが、なぜ他のデータ注釈でチェックされていませんか? – Tony
IndexAttributeは検証属性ではなく、ErrorMessageプロパティもなく、有効な値の範囲に対して検証するために使用されるIsValid()メソッドもありません。 – Anil
ありがとう、私は今理解しています。だから私はインデックスの属性は、コンテキストにエンティティを追加する前に重複をチェックすることをお勧めします。 – Tony