Сравнение объектов ICompositeUserType в nHibernate - PullRequest
0 голосов
/ 09 ноября 2009

Я сделал объект POCO сопоставленным с базой данных следующим образом:

class MoneyObject
{
    Money MoneyAmmount { get;set; }
    string Description { get;set; } 
}

MoneyAmmount - это тип Money, который является производным от ICompositeUserType и имеет 2 свойства: десятичная сумма и строка CurrencyCode:

class Money
{
    decimal Ammount { get;set; }
    string CurrencyCode { get;set; } 
} 

Проблема возникает, когда я пытаюсь получить данные из базы данных, используя критерии, подобные следующим:

var criteria = session.CreateCriteria(typeof(MoneyObject))
                .Add(Expression.Lt("MoneyAmmount", money));

Генерирует следующий SQL-запрос:

SELECT this_.Id as Id2_0_, this_.Value as Value2_0_, this_.Currency as Currency2_0_, this_.Description as Descript4_2_0_ 
FROM MoneyObject this_ 
WHERE this_.Value < @p0 and this_.Currency < @p1;@p0 = 300,01, @p1 = 'USD'

Я не хочу сравнивать мой объект valuetype Money, используя CurrecyCode по символам. Я хочу сравнивать деньги только по количеству объектов и получать данные, используя критерии. Но дело в критериях только со свойствами объекта POCO. Значит я знаю, что сравнение работает:

Expression.Lt("MoneyAmmount.Ammount", money.Ammount)

Я хочу избежать сравнения по свойствам объекта типа оценки и выполнять сравнение только между объектами типа оценки, например

Expression.Lt("MoneyAmmount", money)

Кто-нибудь знает, как изменить такое поведение сравнения?

1 Ответ

2 голосов
/ 09 ноября 2009

Попробуйте что-то вроде этого

var criteria = session.CreateCriteria(typeof(MoneyObject), "m")
                             .CreateAlias("m.MoneyAmmount", "a")
                             .Add(Expression.Lt("a.Ammount", money));

Создание псевдонимов «m» и «a» позволяет сравнивать с вложенным свойством.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...