2011-08-10 64 views
0

nhibernate fellas,将int列映射到nhibernate中的布尔属性的问题

我有一个int列映射为域对象中的布尔类型。一切都很好看,直到今天我们注意到在bool属性上执行QueryOver时,实际生成的sql不符合sqlserver的喜好。

的queryOver看起来像下面,

.Where(Restrictions.On<OrderLine>(ol => _orderLineAlias.Approved).IsLike(true)); 

而且因为这是在SQL,

select * from Orderline where Approved like 'true' 

希望你能看到这里的问题,因为列的数据类型为int,这不会回归我任何事情。更改DB数据类型或Entity类的数据类型不是一种选择。有没有人通过这个之前呢?有针对这个的解决方法吗?

建议,欢迎:)

感谢 /BB

+0

时间回去并改变你的分贝模型..你为什么要让他们不同 – Baz1nga

+0

heh ..好想法..但不会去工作,因为有很多遗留逻辑依赖于此。 – Illuminati

+0

遗留代码aginst你的dB ..嗯.. – Baz1nga

回答

0

你尝试在配置文件中的以下线的东西?

<property name="hibernate.query.substitutions">true 1, false 0</property> 

Link to NH documentation on this topic

+0

谢谢,但它没有任何区别。生成或不生成相同的SQL语法。可能只适用于LinqToHibernate。我在这种情况下使用QueryOver。 – Illuminati

+0

我一直在使用它与HQL(叫我恐龙:)),它工作正常。作为另一个建议,我会创建另一个属性,它只是用作bool的转换器,其中int属性/字段映射到底层列,而bool属性由UI /其他使用。 –

+0

还发现一些匹配你的问题http://stackoverflow.com/questions/5063541/nhibernate-3-0-0-4000-handles-bools-differently-in-queries –

3

你试过:

QueryOver<OrderLine>().Where(x => x.Approved == true)