1

在使用带有实体框架的 POCO 类的 wpf 应用程序中,对数据执行验证的最佳方法是什么。我知道数据注释,但如果我没有完全错的话,它们更多地用于 ASP.Net MVC 而不是 WPF(我没有找到很多 WPF 示例)。早些时候,我让我的 Domain 类实现 IDataErrorInfo 接口,但我不确定这是否是正确的方法。如果我想在稍后阶段与 Silverlight 应用程序或 ASP.NET 应用程序共享我的 EntityFramework 类,那么我最好的方法是什么,以便我可以重用我的验证规则。(对于 ASP.net,我相信我的 IDataErrorInfo 处理错误的方式将毫无用处?)。我可以找到很多类似的问题,但没有一个特别符合我的需求。如果有人能指出我正确的方向,那就太好了

我一直在我的域模型上使用 T4 模板来生成 POCO 类,并且也一直将这些 POCO 类对象用作业务对象

4

2 回答 2

1

开箱即用,WPF 验证使用IDataErrorInfo和/或ValidationRule绑定。 IDataErrorInfo作为部分类,它提供了一种方法来绑定附加逻辑以确保值有效(IE:Person.Age 属性在 1-100 之间)并且ValidationRule能够在将值应用于绑定(即:Person.Age 属性根本就是一个整数)。 IDataErrorInfo显然,仅当 Binding 的值使用兼容的数据类型更新时才有用,ValidationRule如果有人在您的 Age 文本框中键入“十”而不是 10 并且数据类型不兼容,则 's 很有帮助。

IDataErrorInfo可用于所有 WPF/Silverlight/ASP.NET 项目,(请参阅:如何在 ASP.NET 中使用 IDataErrorInfo

ValidationRule's 将与 Bindings 一起使用,因此在 ASP.NET 项目中没有用处。它们可以被认为等同于 Javascript 验证。

简而言之,IDataErrorInfo这正是您正在寻找的,并且将为这些技术提供最多的重用。

于 2012-05-30T22:23:59.417 回答
0

EF 验证不支持开箱即用的 IDataErrorInfo。注释不仅用于验证,还可用于定义模型(例如,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/存档/2011/05/27/ef-4-1-validation.aspx

于 2012-05-30T22:36:13.463 回答