实现IPropertyAccessor NHibernate

时间:2010-07-20 12:39:05

标签: nhibernate c#-3.0

在使用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);
            }
        }

提前致谢,

更新:------ 如何在每次冲洗前禁用此脏检查?

1 个答案:

答案 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" );
    }
}