2013-02-07 48 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