2011-01-14 2 views
0

Мы начинаем преобразование в BL Toolkit, но сталкиваемся с некоторыми проблемами и не нахождением ответов. Одна из таких проблем заключается в невозможности сопоставления атрибута MapValue на нашем DTO.BLToolkit MapValue not mapping

Использование шаблонов T4, мы формируем это (в качестве примера):

[MapField("counterparty_fl")] 
[MapValue(true, 'y')] 
[MapValue(false, 'n')] 
public bool CounterpartyFlag { get; set; } // flag_yn_TY(1) 

Наша база данных Sybase, а поле counterparty_fl является символ (1), который принимает либо «у» или «п».

Однако, когда я смотрю на SQL, порожденного следующий запрос ссылки, он пишет [counterparty_fl] = 0. Что мне нужно [counterparty_fl] = «п»

var results = (from i in facade.InputList 
       where (
        i.UserIdentifier == criteria.UserId && 
        i.CounterpartyFlag == false && 
        i.Name == criteria.Name) 
       select i); 

Кто лучше удачи с MapValue? Какие-либо предложения?

ответ

2

Этот тип сопоставления не поддерживается для запросов linq. Проблема в том, что поле CounterpartyFlag может быть отображено в значения «y», «n», но «false» в вашем выражении не может быть.

Вы можете использовать перечисление для CounterpartyFlag типа поля:

public enum 
{ 
    [MapValue('y')] Yes, 
    [MapValue('n')] No 
} 

Это должно работать.

+0

Спасибо, что, похоже, заставило нас пройти через это препятствие. –

+0

У меня есть вопрос об этом. Использование этого метода Insert: public static int Вставить (эта таблица target, Expression > setter); «CounterpartyFlag = false» работает отлично. Итак, как-то на вставке непосредственно из DTO таблицы, преобразование просто преуспевает. В чем разница, если бы вы могли объяснить? Мне любопытно, и я ожидаю, что мои товарищи по команде тоже захотят узнать. –

Смежные вопросы