我們正在使用複雜類型來管理這樣我們的翻譯領域:實體框架複雜類型自定義驗證,驗證停止遞歸
[ComplexType]
public class Translated
{
[Required]
public string NL { get; set; }
[Required]
public string EN { get; set; }
[ScaffoldColumn(false)]
public string TranslatedText
{
get
{
return Util.Translate(NL, EN);
}
}
}
我們需要的字段存在。但在某些情況下,整個翻譯的領域是可選的,因爲在:
public class Question
{
...
[Optional(ErrorMessage="Foo")]
public Translated Description { get; set; }
...
}
但是,它似乎是可選屬性被計算,當它返回false沒有什麼,結果完成。
class OptionalAttribute : ValidationAttribute
{
public override bool IsValid(object value)
{
return false;
}
}
當我把可選屬性在非複合型它能正常工作,錯誤信息將永遠是富。
最終目標是在兩種情況下都允許描述爲空,但是當其中一個字段被填充時,錯誤當然應該傳播。
停止驗證遞歸會導致該領域是可選的,但它也能防止萬一的領域,卻被填寫的驗證。
如何做到這一點任何想法?
Btw。 EF CTP5是舊版本。目前verwion被稱爲EF 4.1 RTW(最終版本)。 – 2011-04-12 18:21:36
我會用新版本測試這種情況並回報。 – 2011-04-13 18:09:35
我在原始問題中勾畫的情況依然成立。我想我可以覆蓋我們的實體的Validate方法來檢查它是否是可選的,如果是這種情況,只有在它不是空的情況下傳播它的驗證結果。 關於如何最好地實現這一點的任何建議?我也擔心用自己的代碼覆蓋MVC/Framework提供的代碼。 – 2011-04-16 19:19:38