LINQ помещает нежелательные конечные пробелы в строки

У меня очень неприятная проблема с LINQ и MS SQL Server.

В настоящее время я создаю некоторое программное обеспечение на WPF C # и использую LINQ для создания классов из данных в базе данных.

Однако, когда я обновляю поле nvarchar или varchar в базе данных из моей программы, LINQ добавляет конечные пробелы в строку!

У меня есть поле в таблице, определенное следующим образом:

ProductName = NVARCHAR(10)

Итак, если я сделаю это:

Product.Name = "Bike";
Product.Name = Product.Name.Trim();
repository.Add(Product);   // Runs an .InsertOnSubmit
repository.Save();         // Runs a .SubmitChanges

тогда результирующие данные в БД выглядят как «Велосипед [ПРОБЕЛ] [ПРОБЕЛ] [ПРОБЕЛ] [ПРОБЕЛ] [ПРОБЕЛ] [ПРОБЕЛ]», где [ПРОБЕЛ] - это просто пробел (здесь нельзя писать несколько пробелов в этом тексте).

Почему он это делает и как мне заставить его перестать добавлять эти надоедливые конечные пробелы?

заранее спасибо


person Kaare Mai    schedule 10.12.2009    source источник
comment
Вы уверены, что это не поле NCHAR (10)?   -  person Guffa    schedule 10.12.2009


Ответы (3)


Если я правильно помню, у меня была такая же проблема ... Это не из-за linq, а из-за типа столбца. Пожалуйста, попробуйте изменить его на VARCHAR.

person Cristian Boariu    schedule 10.12.2009
comment
Как я уже писал в своем вопросе, база данных использует NVarChar. Однако я нашел проблему. - person Kaare Mai; 05.01.2010

Автоматически сгенерированные классы LINQ определили поля NVarchar следующим образом:

[Column(Storage="_Text", DbType="NChar(20) NOT NULL", CanBeNull=false)]
public string Text
{
get
{
    return this._Text;
}
set
{
    if ((this._Text != value))
    {
        this.OnTextChanging(value);
        this.SendPropertyChanging();
        this._Text = value;
        this.SendPropertyChanged("Text");
        this.OnTextChanged();
    }
}
}

Где должны быть настройки столбца:

[Column(Storage="_Text", DbType="NVarChar(20) NOT NULL", CanBeNull=false)]

Проблема возникла из-за того, что я обновил тип в базе данных SQL без повторного создания классов LINQ.

person Kaare Mai    schedule 05.01.2010

То же самое делает и Нчар.

Эти типы заполняют пробелы: Нчар и Нварчар.

Я преобразовал свою базу данных и обновил свою модель. Все исправлено.

Проверь это...

В чем разница между char, nchar , varchar и nvarchar в SQL Server?

Если вы не хотите менять свою модель, вы можете использовать функцию обрезки mssql.

person Levent KAYA    schedule 06.11.2012