2009-09-10 117 views
4

我玩弄了nhibernate验证器,并得到了一个近乎完美的解决方案。如何验证自定义属性?

我可以定义一个属性进行验证,并在预保存时完成。但我有一些情况下它不工作。

我们假设我有一个叫做person的对象,并通过nhibernate将地址(也是一个对象)映射为人的一个属性(实际上它是一个地址列表)。

当我保存该人时,我的地址未经验证。

输入信息的表格是由部分表格构成的。如果地址验证可以添加到该人员的验证列表中,那会很好,但那不是必需的。

我需要一个通用的解决方案,我不能通过“手”来验证,例如如果人再验证地址...验证器应该看到属性后面有一个对象,我也必须验证它。

更新:我正在寻找的是一种验证映射对象(hasmany)的方法。

+0

你可以发布你的一些源代码,特别是验证者是如何连接到感兴趣的列/集合的? – 2009-09-21 19:23:20

+0

在课堂上,我有属性NHibernate的验证器让我定义类似 : 公共虚拟字符串foofield {获得;设置;} 比方说,我有[NotNullNotEmpty(消息=“Foofield请填写的东西。”)一个班级人员和一个班级地址。因此,我在人员的班级中绘制地图,其中保存地址未经验证的人员。如果我打电话给他们保存每一个他们验证......但这绝对不是解决方案;) – griti 2009-09-22 06:50:10

回答

1

在切换到最新版本的nhibernate验证器后,验证对子类和映射类有效。与xVal 1.0一起,这是一个非常令人满意的解决方案。

现在我可以在每个属性上定义它应该被验证的内容(例如,对于正则表达式,长度等),并且我通过nVibernate Validator在服务器端通过xVal在客户端获取消息。事实上,他们共享验证模式和错误消息。

我会推荐这个任何nHibernate项目,其中需要一个简单的验证和消息定义。

1

如果你想在这些类中输入验证,这是我认为你正在尝试做的事情,我会建议不要这样做,因为这是业务逻辑。你在Hibernate中发现的任何事情都只是为了确保数据库中的约束(即非空列)。

我会建议您创建一个实用程序类或方法来为您进行输入验证。如果您需要将数据库约束添加到实体属性中,尽一切办法来做到这一点,但我不会依赖它们进行输入验证。

+1

我需要在输入验证和业务逻辑/服务器端验证。有了xVal和nHibernate,我几乎可以毫不费力地完成任务。看到我的回答,我们写了关于同一时间:) +1为我的问题thinging;) 一般我同意你的建议,我正在寻找一个完成的解决方案,写我自己现在会花费很多的开销。 – griti 2009-09-22 12:58:56