我在商业应用程序中使用Silverlight + EntityFramework + RIA Services。底层数据库表包括Humans表和HumanAddresses表。每个人都可以拥有一个或多个不同类型的地址(例如,家庭,工作,出生地等)。必须始终存在至少一个“Home”类型的地址。
用户界面允许在提交之前编辑,删除和添加给定人员的新几个地址。我需要执行验证以确定这些更改是否违反了前面提到的规则。这样做的最佳方式是什么?
我尝试使用CustomValidationAttribute,但它允许(AFAIK)仅实体级验证,而不允许跨多个实体进行验证,其中一些实体将被删除,而其他实体将被添加或修改。
答案 0 :(得分:1)
如果您需要访问其他实体,则需要在数据库上下文中覆盖ValidateEntity。调用SaveChanges()时,每个已更改的实体都会调用此方法。
protected override DbEntityValidationResult ValidateEntity(DbEntityEntry entityEntry, IDictionary<object, object> items)
{
DbEntityValidationResult result = new DbEntityValidationResult(entityEntry, new List<DbValidationError>());
result = base.ValidateEntity(entityEntry, items);
//Do your validation
if(invalid)
{
result.ValidationErrors.Add(new DbValidationError("Property", "Error Message"));
}
return result;
}
中的验证选项