多个对象的Silverlight验证

时间:2013-02-07 12:16:56

标签: silverlight entity-framework validation ria

我在商业应用程序中使用Silverlight + EntityFramework + RIA Services。底层数据库表包括Humans表和HumanAddresses表。每个人都可以拥有一个或多个不同类型的地址(例如,家庭,工作,出生地等)。必须始终存在至少一个“Home”类型的地址。

用户界面允许在提交之前编辑,删除和添加给定人员的新几个地址。我需要执行验证以确定这些更改是否违反了前面提到的规则。这样做的最佳方式是什么?

我尝试使用CustomValidationAttribute,但它允许(AFAIK)仅实体级验证,而不允许跨多个实体进行验证,其中一些实体将被删除,而其他实体将被添加或修改。

1 个答案:

答案 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;
}

以下是EF http://msdn.microsoft.com/en-us/data/gg193959.aspx

中的验证选项