Отобразите int в bool в NHibernate, используя в качестве источника данных вторую таблицу - PullRequest
0 голосов
/ 14 октября 2011

Я пытаюсь создать карту, которую я не знаю, поддерживается ли она в NHibernate.

У меня есть таблица A, для которой у меня есть отображение в Fluent NHibernate. У меня есть другая таблица под названием B, в которой я должен искать A.Id. Если я нахожу этот идентификатор в этой таблице, тогда я должен установить свойство bool в отображении для класса A в true, в противном случае - в false.

Между таблицей A и таблицей B есть отношение один к одному, представленное в отображении с помощью метода HasOne. Проблема в том, что в HasOne нет метода CustomType, который я мог бы использовать для преобразования результата в свойство bool.

Я также был бы в порядке преобразования значения в бит или int из отображения, но я не знаю, как это сделать.

Кто-нибудь знает, возможно ли это, и если да, то как это можно сделать?

Спасибо, Мосу.

Ответы [ 2 ]

1 голос
/ 14 октября 2011

Формула сделана по такому сценарию

Map(x => x.BooleanProperty).Formula("SELECT true IF EXISTS (SELECT 1 FROM B WHERE B.A_id = Id)");

Edit:

другой подход (не проверен)

// public AMap()
Join("TableB", join =>
{
    join.KeyColumn("A_id");
    join.Optional();
    Map(x => x.BooleanPropery, "someBcolumn").Not.Insert().Not.Update().CustomType<NullToFalseElseTrue>();
});

// class A
public virtual bool BooleanPropery { get; private set; }
0 голосов
/ 17 октября 2011

Firo предложил правильный ответ. Однако есть небольшая проблема с его кодом, поэтому я также отвечаю на мой вопрос для большей наглядности (чем в комментарии).

Join("TableB", join =>
{
    join.KeyColumn("A_id");
    join.Optional();
    join.Map(x => x.BooleanPropery, "someBcolumn").Not.Insert().Not.Update().CustomType<NullToFalseElseTrue>();
}); 

Разница небольшая, но важная. Без пропущенного 'join' в третьей строке делегата Join вы говорите NHibernate, что вы отображаете столбец A_ID с BooleanProperty вместо B_Id, как и следовало ожидать.

...