Внедрение IPropertyAccessor NHibernate - PullRequest
0 голосов
/ 20 июля 2010

Во время использования NHibernate ...

Одна странная проблема, с которой я столкнулся, - это множественные обновления после команды Session.Flush ().Данные на самом деле не изменились ... Просто хотел выполнить Выберите все, в моем случае было 1000 обновлений - по одному на возвращенную строку !!!

Такое поведение происходит, только если я использую свойства с пользовательским PropertyAccessor в качестве типа доступа.Причина, по которой я создал собственное свойство, заключалась в том, что в моих объектах есть типы uint и ushort, поэтому я хотел привести их из (long или Int32 соответственно) в Setter.

Вопрос в том, как я могу отключить эти обновления или почему мой пользовательский Сеттер вызывает такое поведение?

void Set(object target, object value)
        {
            If(Value.GetType() == typeof(long))
            {
            Target.GetType().GetProperty(_propertyName).SetValue((uint)value);
            }
        }

Заранее спасибо,

Обновление: ------ Как я могу отключить эту грязную проверку перед каждым сбросом?

1 Ответ

2 голосов
/ 20 июля 2010

Похоже, ваш PropertyAccessor испортил грязное отслеживание сеанса NHibernate.Эта запись показывает, как вы можете проверить, является ли объект грязным.Вы должны добавить этот код и выполнить отладку в исходном коде 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" );
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...