Как можно контролировать тип параметра запроса SQL при использовании строкового свойства в .NET Entity Framework - PullRequest
0 голосов
/ 22 января 2012

В таблице базы данных есть столбец типа char(2).

Когда я использую параметр в linq, такой как .Where(x => x.Code == code), параметр SQL-запроса преобразуется в varchar(max), где я бы действительно хотел, чтобы оно было char(2), чтобы избежать неявного преобразования. Это потому, что запрос не использует индексы базы данных так, как мне хотелось бы.

Property(c => c.Code)
            .HasColumnType("char")
            .IsFixedLength()
            .HasMaxLength(2);

Код первого сопоставления показан выше. Похоже, что единственное, что влияет на перевод, это .HasColumnType("char"). Похоже, это не влияет на перевод запроса, так как это влияет на то, выбирает ли он varchar(max) или nvarchar(max).

Я подумал о двух решениях: одно состоит в том, чтобы изменить базу данных таким образом, чтобы она использовала int и поиск вместо char-кода, а другое - преобразовать код для использования выражения. Две вещи, которые я бы предпочел не делать, если есть лучший способ контролировать сопоставления с sql.

1 Ответ

0 голосов
/ 22 января 2012

Я разработал способ добиться этого.

Вместо использования .Where(x => x.Code = code)

Я сейчас использую

var codes = new string[] { code }

...

.Where(x => codes.Contains(x.Code))

Это переводит в запросе константу, а не параметр.

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