Entity Framework использует неправильное кодирование строки? - PullRequest
0 голосов
/ 23 января 2019

Если я записываю строку в таблицу SQL Server с использованием Entity Framework (перенесла существующую базу данных в EF), а затем измеряю длину строки в SQL Server Management Studio, моя строка слишком длинная.Похоже, что разные типы сортировки добавляют кучу пробелов в конце строки.

Нужно ли явно устанавливать тип сортировки для EF?Если да, то есть ли лучший метод, чем this ?

Получил параметры сортировки по умолчанию:

SELECT SERVERPROPERTY('collation') SQLServerCollation

Результат:

SQL_Latin1_General_CP1_CI_AS 

Я измерялстрока, подобная этой (возвращает 51 символ, если строка «Билл»):

SELECT 
    LEN(CONCAT(first_name, '!' COLLATE SQL_Latin1_General_CP1_CI_AS))
FROM 
    [GreenCardSite].[dbo].[AppUser]
WHERE
    user_id = 16840

Обратите внимание, что!добавляется в конец строки, потому что по умолчанию SQL Server не измеряет пробелы при расчете длины.Кроме того, когда я запустил это без указания параметров сортировки, я получил ошибку:

Невозможно разрешить конфликт параметров сортировки между «SQL_Latin1_General_CP1_CI_AS» и «Latin1_General_100_CI_AS» в операции concat.

AppUser EF класс:

[Table("AppUser")]
public partial class AppUser
{
    [Key]
    public int user_id { get; set; }

    [StringLength(50)]
    public string first_name { get; set; }

    [StringLength(50)]
    public string last_name { get; set; }
    .....

1 Ответ

0 голосов
/ 23 января 2019

Проблема не имеет ничего общего с вашим сопоставлением. Ваш тип столбца CHAR(50). В столбце этого типа остальная часть содержимого поля дополняется пробелами, поэтому вместо Bill у вас фактически есть Bill____________________________________.

Так что вам нужно либо изменить тип данных на VARCHAR(50), либо вам нужно будет обрезать пробелы:

SELECT len(concat(rtrim(first_name), '!'))
FROM [GreenCardSite].[dbo].[AppUser]
WHERE user_id = 16840
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...