В таблице базы данных есть столбец типа 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.