NHibernate代理阻止Castle.Validator组件完成它的工作

时间:2009-03-26 23:05:33

标签: .net nhibernate validation reflection castle

我使用Castle.Validator组件遇到了NHibernate代理验证的问题。看起来验证器无法从实体代理的属性中获取属性。

我尝试使用Inherited = true定义验证属性,而Castle.Validator运行器使用以下语句获取em:

property.GetCustomAttributes(typeof(IValidatorBuilder), true);

所以它应该从我的实体获取属性,而它们在技术上是验证对象(代理)的基类?为什么它不起作用? GetCustomAttribute总是返回空数组。

2 个答案:

答案 0 :(得分:2)

同样的事发生在我身上。问题是NHibernate在创建代理时不会继承属性。 我发现的只有forum post,其中的问题得到了认可并且简单明了 解决方法(在验证时不要使用代理)这就是我最终要做的事情。

我可以推荐这个验证库:Fluent Validation,我还没有使用它,但我打算这样做,主要是因为我厌倦了使用属性(因为这样的问题)。

答案 1 :(得分:0)

属性很好,因为它们确实是域模型的一部分。

我想我找到了问题的解决方案。我修补了Castle.Validator这样想。这太疯狂了,但这段代码:

property.GetCustomAttributes(true /*inherit*/);

返回空数组,而在我看来,完全等效的代码返回属性:

System.Attribute.GetCustomAttributes(property);

@#$%是什么?