在属性名称中使用不带字符串的NHibernate限制

时间:2010-08-31 21:25:59

标签: nhibernate nhibernate-mapping nhibernate-criteria

创建条件时,可以添加适用于属性的限制。创建限制有两种方法:

Restrictions.Eq(string propertyName, object value)

Restrictions.Eq(IProjection projection, object value)

事情是,我觉得将属性名称作为字符串传递并不舒服,因为如果它们发生变化,我的项目将照常编译,并且只有在单元测试期间才能找到任何可能的命名不匹配。我正在尝试实现TDD,但它不会很快发生,所以我试图限制单元测试的依赖性来检查错误(直到我们设法接受TDD)。

有什么想法吗? 提前谢谢!

3 个答案:

答案 0 :(得分:4)

使用LINQ,QueryOver(NH3.x)或NH Lambda Extensions(NH2.x)或NHibernate Expression Extensions(NH1.2)

所有这些都比仅仅使用字符串更强类型。

答案 1 :(得分:0)

我能感受到你的痛苦。

但是没有办法使用条件API中的投影为您的属性添加动态引用,就像您无法使nHibernate映射检测到表或列名更改一样。

在大多数情况下,使用“属性”逐步执行查找和替换。

答案 2 :(得分:0)

只要你完全覆盖单元测试(你不是吗?)它应该不是问题,如果它: - )?

避免使用字符串作为属性名称的另一个原因是使用例如重构Resharper无法修复这些引用。这就是Fluent NHibernate真正闪耀的地方。