在使用NHibernate期间...
我遇到的一个奇怪问题是Session.Flush()命令后的多次更新。没有数据实际改变...只是想执行选择所有,在我的情况下有1000个更新 - 每个返回行一个!
仅当我使用自定义PropertyAccessor的属性作为访问类型时才会发生此类行为。我创建自定义属性的原因是我在对象中有uint和ushort类型,所以我想在Setter上从(long或Int32相应)转换它们。
问题是如何禁用这些更新或为什么我的自定义Setter导致此类行为?
void Set(object target, object value)
{
If(Value.GetType() == typeof(long))
{
Target.GetType().GetProperty(_propertyName).SetValue((uint)value);
}
}
提前致谢,
更新:------ 如何在每次冲洗前禁用此脏检查?
答案 0 :(得分:2)
看起来你的PropertyAccessor搞乱了NHibernate Session脏跟踪。这个post显示了如何测试实体是否脏。您应该将此代码和调试添加到NHibernate源中,以确切了解您的实体被视为脏的原因。我怀疑这些类型不匹配。
<强>更新强>
另一种方法是将您的实体定义保持为无符号,但更改数据库映射以在数据库中使用签名类型。这是使用Fluent NHIbernate和SQL服务器的方法:
public class TestEntity : Entity
{
public virtual uint Unsigned { get; set; }
public virtual ushort UnsignedShort { get; set; }
}
public class TestEntityMap : ClassMap<TestEntity>
{
public TestEntityMap()
{
Map( x => x.Unsigned ).CustomSqlType( "bigint" );
Map( x => x.UnsignedShort ).CustomSqlType( "int" );
}
}