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

nchar尾随空格导致记录在nHibernate中显示脏,nhibernate,Nhibernate,我发现,每当我从数据库加载对象时,它都会立即显示为脏对象 我发现了一些代码,可以让我在这里查看对象是否脏: var x=session.Get(123); var dirtyEntity=session.IsDirtyEntity(x); 对于此类的实体,dirtyEntity的计算结果始终为true 再仔细研究一下,我想我已经找到了问题的根源。我有一个属性映射到SQL Server中的nchar(15)列上。DB中的值具有尾随空格,但对象上显示的值已被修剪。所以下面返回的是true var

我发现,每当我从数据库加载对象时,它都会立即显示为脏对象

我发现了一些代码,可以让我在这里查看对象是否脏:

var x=session.Get(123);
var dirtyEntity=session.IsDirtyEntity(x);
对于此类的实体,dirtyEntity的计算结果始终为true

再仔细研究一下,我想我已经找到了问题的根源。我有一个属性映射到SQL Server中的nchar(15)列上。DB中的值具有尾随空格,但对象上显示的值已被修剪。所以下面返回的是true

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

有人知道我如何让nHibnernate说“状态OK”和“状态OK”是等价的,并且实体不是脏的吗?

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

这可以通过为属性使用
IUserType
来解决。在unaddins中有一个例子;你可以了解它的用法。

如果他使用的是一个无法修改的遗留数据库怎么办?拉斐尔一针见血。我正在编写一个接口,它可以同步两个独立的系统,但我对这两个系统中的db模式都没有控制权。这个问题已经存在很长一段时间了,事实上,这个选项就是我最终解决它的方法。感谢您的更新!我已经修复了到源文件的断开链接。
var x = session.Get<MyRecord>(123);
var dirtyProperty = session.IsDirtyProperty(x, "Status");