2013-02-07 40 views
-1

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

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

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

+0

提供一些自己的努力来解决问题的。 – kleinfreund

回答

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