Параметры Entity Framework, devArt и Oracle VarChar

Привет. Я использую Oracle Connect от devArt для работы с Entity Framework 4.1 POCO и Oracle.

У меня проблема с некоторыми запросами, в которых тип столбца Oracle — Char (фиксированная длина). Параметр, который используется в сгенерированном запросе SQL, отформатирован как VarChar вместо Char, и это приводит к тому, что мои запросы возвращают нулевые строки. Есть ли способ заставить EntityFramework/DevArt дополнить параметр?

Вот пример проблемы (запрос имени пользователя). Этот код должен возвращать строки, но это не так.


string aUserName = "Test";
var query = from u in users
            where u.UserName == aUserName
            select u;

Если я изменю первую строку кода на:

string aUserName = "Test".PadRight(20);

Тогда это работает (столбец Oracle - Char (20)). Я бы не хотел делать заполнение (мне не нужно с SQL Server). Есть ли какое-то изменение конфигурации, которое я могу внести? Переключатель строки подключения? Атрибут моего POCO?


person JMarsch    schedule 03.05.2011    source источник
comment
есть ли причина, по которой столбец CHAR? допустимо ли просто изменить это на varchar2?   -  person Harrison    schedule 03.05.2011
comment
Хотел бы я, но это устаревшая база данных, с ней связана куча кода и установлено несколько установок (мы являемся независимым поставщиком программного обеспечения). Так что я должен работать со схемой, которая у нас есть.   -  person JMarsch    schedule 03.05.2011


Ответы (2)


Мы ответили вам здесь на нашем форуме.
Пожалуйста, сообщите нам, если у вас возникнут проблемы с предоставленным решением.

person Devart    schedule 10.05.2011

У вас есть два варианта:
1. Сделайте то, что вы сделали, и дополните строковую переменную имени пользователя правильно.
2. Удалите пустые символы — обрежьте поле имени пользователя справа.

Другой вариант:

string aUserName = "Test";
var query = users.select(x => string.Join(string.Empty, x.UserName).TrimEnd()).
                  where(x => x==aUserName)

(это вернет вам имена пользователей, а не все пользовательские объекты)

Надеюсь это поможет.

person Naor    schedule 04.05.2011
comment
Я отметил ваш ответ как ответ, потому что Padright оказался лучшим решением для моей ситуации. (Я должен поддерживать как SQL Server, так и Oracle). Я нашел еще одно решение, которое принесет пользу при разработке только для Oracle: вы можете применить атрибут [Column] к столбцам и передать CHAR в качестве именованного параметра типа. Это заставит все работать в Oracle, но вы получите исключение во время выполнения с SQL Server. - person JMarsch; 04.05.2011