2012-05-30 29 views
1

在使用POCO類與Entity框架的wpf應用程序中,對數據執行驗證的最佳方式是什麼?我知道數據註釋,但如果我不是非常錯誤,他們更多地使用ASP.Net MVC比WPF(我沒有找到WPF的許多例子)。之前我讓我的Domain類實現了IDataErrorInfo接口,但我不確定這是否是正確的方法。如果我想在稍後的階段與Silverlight應用程序或ASP.NET應用程序共享我的EntityFramework類,那麼我最好的方法是什麼,這樣我就可以重用我的驗證規則。 (使用ASP.net,我相信我的IDataErrorInfo處理錯誤的方法是沒用的)。我可以找到很多類似的問題,但沒有一個能夠滿足我的需求。這將是巨大的,如果任何人都可以在正確的方向指向我使用實體框架和WPF/Silverlight或ASP.Net驗證

我一直在使用T4模板,我的域模型來生成POCO類和業務對象也

回答

1

出的一直在使用這些POCO類對象該框中,WPF驗證使用IDataErrorInfo和/或ValidationRule的綁定。 IDataErrorInfo是部分類,它提供了一種方法來綁定額外的邏輯以確保該值有效(IE:Person.Age屬性在1-100之間),並且ValidationRule能夠在應用該值之前檢查該值綁定(IE:Person.Age屬性是一個整數)。 IDataErrorInfo顯然只有在Binding的值用兼容數據類型更新時纔有用,ValidationRule在有人在「Age」文本框中鍵入「Ten」而不是10時有幫助,並且數據類型不兼容。

IDataErrorInfo是可重複使用的所有WPF/Silverlight中/ ASP.NET項目,(參見:How to use IDataErrorInfo in ASP.NET

ValidationRule的是用綁定使用,因此無法在ASP.NET項目中非常有用。他們可以被認爲是Javascript驗證的等價物。

總之,IDataErrorInfo正是你正在尋找的,並將提供這些技術的最多重用。

0

IDataErrorInfo不支持EF驗證的開箱即用。註釋不僅用於驗證,還可用於定義您的模型(例如Required,MaxLenght,StringLength屬性等)。開箱即用,您可以使用更多的機制來驗證實體 - 通過從ValidationAttribute派生自己的屬性,使用CustomValidationAttribute或通過實現IValidatableObject來實現。這就是EF支持開箱即用的功能。如果這兩種方法都不能替代內置的驗證,可以通過覆蓋DbContext.ValidateEntity()方法並使用任何適用於您的驗證機制。一對有用的鏈接:http://blogs.msdn.com/b/adonet/archive/2010/12/15/ef-feature-ctp5-validation.aspx http://blogs.msdn.com/b/adonet/archive/2011/05/27/ef-4-1-validation.aspx