-1

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

UI 允许在提交之前编辑、删除和添加给定人员的新地址。我需要执行验证以查明这些更改是否违反了命名规则。做这个的最好方式是什么?

我尝试使用 CustomValidationAttribute,但它只允许(AFAIK)实体级验证,而不是跨多个实体的验证,其中一些要删除,而另一些要添加或修改。

4

1 回答 1

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中的验证选项

于 2013-02-08T17:38:32.683 回答