nchar尾随空格导致记录在nHibernate中显示为脏

时间:2010-09-20 12:20:10

标签: nhibernate

我发现无论何时从数据库加载一个对象,它都会立即显示为Dirty。

我找到了一些代码,可以让我看到对象是否脏了:http://nhforge.org/wikis/howtonh/finding-dirty-properties-in-nhibernate.aspx

var x = session.Get<MyRecord>(123);
var dirtyEntity = session.IsDirtyEntity(x);

dirtyEntity始终对此类的实体求值为true。

进一步研究我认为我找到了问题的根源。我有一个属性映射到SQL Server中的nchar(15)列。 DB中的值具有尾随空格,但是对象上显示的值已被修剪。所以...以下是真的。

var x = session.Get<MyRecord>(123);
var dirtyProperty = session.IsDirtyProperty(x, "Status");

有谁知道我怎么能让nHibnernate说“Status OK”和“Status OK”是公平的,并且实体不脏?

2 个答案:

答案 0 :(得分:2)

为什么不将varchar用作上述列的数据库中的数据类型。这将解决您的问题,并防止数据库中的空间浪费。

答案 1 :(得分:1)

使用IUserType作为属性可以解决这个问题。 UNHAddins中有一个TrimString示例;你可以阅读它的用法here