我发现无论何时从数据库加载一个对象,它都会立即显示为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”是公平的,并且实体不脏?
答案 0 :(得分:2)
为什么不将varchar用作上述列的数据库中的数据类型。这将解决您的问题,并防止数据库中的空间浪费。
答案 1 :(得分:1)
使用IUserType
作为属性可以解决这个问题。 UNHAddins中有一个TrimString示例;你可以阅读它的用法here。