My Entity Framework 6域使用属性,IValidatableObject使用其他规则。但是,某些约束需要访问数据库。由于我有几十个实体,DbContext.ValidateEntity看起来很乱,有很多调用来验证每个实体。
另一方面,DbContext.ValidateEntity不会将模型绑定上的实体验证为IValidatableObject。因此,如果我使用这样的代码,我将向用户发送属性和IValidatableObject验证:
if (ModelState.IsValid) // Looks for attribute validations and also IValidatableObject
{
db.Foo.Add(foo);
db.SaveChanges(); // DbContext.ValidateEntity triggers only here.
return RedirectToAction("Index");
}
return View(foo);
我发现了许多变通方法,例如在IValidatableObject实现中使用DbContext,但它打破了验证范围的分离。