Как отобразить Enum в char (1) в LINQ-to-SQL? - PullRequest
4 голосов
/ 06 июня 2011

У меня есть enum, который сопоставляется с возможными значениями поля в поле char (1) в БД.

public enum TestEnum: char
{
    Value1 = 'a',
    Value2 = 'b',
    ...
}

LINQ-to-SQL пытается отобразить поля char как значения, которые являются именамиперечисления.Например, для значения «a» LINQ-to-SQL пытается найти значение TestEnum.a вместо TestEnum.Value1, что вызывает исключение.Он поддерживает только сопоставление перечислений на основе значений для целочисленных полей.

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

Есть ли другой способ заставить LINQ-to-SQL использовать значение enum для сопоставления с char (1)?

1 Ответ

2 голосов
/ 12 июня 2011

Вот что мы делаем сейчас:

Мы используем System.Char в качестве базового типа и typecast во время назначения. Например:

entity.SomeField = (char)TestEnum.Value1;

И мы используем Equals в запросах, таких как:

where entity.SomeField.Equals(TestEnum.Value1);

.Equals делает преобразование. Если вы ввели здесь вместо этого, SQL-сервер добавляет ненужное преобразование NVarChar(1) -> Char(1). .Equals синтаксис этого не делает и по какой-то причине ведет себя корректно.

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