Предотвращение того, что пустые строки становятся пустыми в динамических данных asp.net - PullRequest
0 голосов
/ 15 февраля 2012

У меня есть стандартный сайт ASP.NET 4 Dynamic Data (с использованием Linq to SQL).

В моей базе данных SQL-Server у меня есть сотни полей varchar, которые имеют значение NOT NULL, но имеют значение по умолчанию пустой строки. Они никогда не должны быть НЕДЕЙСТВИТЕЛЬНЫМИ, но они могут иметь пустую строку в качестве содержимого.

При редактировании этих полей на сайте динамических данных внутренняя логика видит поле как NOT NULL и где-то между TextBox1.Text (который является пустой строкой) и вызовом UPDATE sql устанавливает значение NULL, и они обновляются с ошибкой .

Я вижу, что System.Web.DynamicData.MetaColumn имеет свойство 'ConvertEmptyStringToNull', но доступно только для чтения.

Что я могу сделать, чтобы пустая строка стала NULL без необходимости изменять свойства для всех сотен полей?

Ответы [ 3 ]

0 голосов
/ 18 февраля 2012

В FieldTemplates / Text_Edit.ascx.cs измените поведение строк, сначала удалите валидаторы, потому что они препятствуют отправке формы:

protected void Page_Load(object sender, EventArgs e) {
    TextBox1.MaxLength = Column.MaxLength;
    if (Column.MaxLength < 20)
        TextBox1.Columns = Column.MaxLength;
    TextBox1.ToolTip = Column.Description;

    if (Column.IsString)
    {
        this.Controls.Remove(RequiredFieldValidator1);
        this.Controls.Remove(RegularExpressionValidator1);
        this.Controls.Remove(DynamicValidator1);
    }
    else
    {
        SetUpValidator(RequiredFieldValidator1);
        SetUpValidator(RegularExpressionValidator1);
        SetUpValidator(DynamicValidator1);
    }
}

Часть кода, котораяпреобразует пустую строку в NULL где-то в методе ConvertEditedValue, поэтому пропустите это для строк:

protected override void ExtractValues(IOrderedDictionary dictionary) 
{
    if (Column.IsString)
    {
        dictionary[Column.Name] = TextBox1.Text;
    }
    else
    {
        dictionary[Column.Name] = ConvertEditedValue(TextBox1.Text);
    }
}

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

Я не вижу нигде в моделях данных Linq to SQL или EF, где бы я мог узнать о моем значении по умолчанию для SQL-Server.Существует свойство DefaultValue, но оно всегда равно NULL.

0 голосов
/ 16 мая 2012

Поскольку вы хотите установить значение по умолчанию (пустая строка) в базе данных, а не в приложении, рассмотрите возможность использования метаданных в соответствующих столбцах для инициализации базы данных по умолчанию:

[Column(IsDbGenerated = true, UpdateCheck = UpdateCheck.Never, AutoSync=AutoSync.Never)]
public object MyColumn { get; set; }
0 голосов
/ 15 февраля 2012

У вас есть одна процедура для вызова вашей базы данных?Если это так, вы можете проверить значения полей здесь или просто добавить пустую строку к каждому значению.

...