1

ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Я ответил на свой вопрос ссылкой на ответ на аналогичный вопрос. Я соглашусь с этим ответом, как только мне позволено (пока никто не придет с лучшим ответом).ASP.NET MVC 2 RC2 с привязкой к NVARCHAR NOT NULL

У меня есть столбец базы данных, определяемый как NVARCHAR(1000) NOT NULL DEFAULT(N'') - другими словами, текстовый столбец с ненулевым значением со значением по умолчанию пустым.

У меня есть класс модели, сгенерированный конструктором классов Linq-to-SQL, который правильно идентифицирует свойство как , а не nullable.

У меня есть TextAreaFor на мой взгляд на это имущество. Я использую UpdateModel в своем контроллере для извлечения значения из формы и заполнения объекта модели.

Если я просматриваю веб-страницу и оставляю текстовую область пустой, UpdateModel настаивает на том, чтобы установить свойство NULL вместо пустой строки. (Даже если я установил значение пустым в коде перед вызовом UpdateModel, он все еще перезаписывает это с помощью NULL). Это, конечно же, приводит к сбою последующего обновления базы данных.

Я мог проверить все такие свойства для NULL после вызова UpdateModel, но кажется, что смешно - конечно, должно быть лучше?

Пожалуйста, не говорите мне, мне нужна специальная вставка для такого простого сценария ...!

+0

Кроме того, я не знаю, как это выглядит, чтобы обозначить строковый тип «not null», который невозможен, строка является ссылочным типом, она может быть нулевой. Что бы это было, если не было нулевого? Пустая строка? Конечно, string.empty является одним из вариантов, но Framework не создает пустые строки по умолчанию, когда вы это делаете, например, строку MyString; – mare

+0

@mare: так как я использую конструктор VS2008 «Linq to SQL Classes» для создания моего класса модели, у него есть пользовательский интерфейс, который позволяет мне просматривать классы в виде «диаграммы базы данных». Благодаря этому я могу проверить свойства различных таблиц и столбцов, и именно там я вижу, что он понимает, что это столбец с непустым значением. Я не понимаю, почему это не может быть отражено в сгенерированном классе (и, действительно, я не понимаю, почему значение по умолчанию тоже не может быть отражено!). –

+0

Необходимо было бы неявно знать, что, когда вместо столбца SQL с нулевым значением замените значения по умолчанию на string.Empty. Я понимаю, что это может быть полезно в вашем случае и во многих других случаях, но, видимо, (к сожалению) это не работает. – mare

ответ

2

Может быть дубликатом или что-то в строке этого:

MVC binding form data problem

Я боюсь пользовательской модели связующий будет необходимо. ;)

+0

Спасибо. Ответ Джаба на этот вопрос был полезен. –

+0

@mare: можете ли вы обновить свою ссылку, чтобы указать на сам вопрос, а не на свой ответ? Тогда я приму это. –

+0

хорошо, сделал. thx – mare

0

Возможно, вы захотите использовать частичную реализацию класса вашей сущности, которая реализует обработчик измененного свойства on для этого конкретного свойства. Когда вы обнаружите, что свойство было изменено на NULL, просто измените его на string.Empty. Таким образом, в любое время NULL присваивается свойству, он получает сброс в пустую строку.

+0

@tvanfosson: Я мог бы, но тогда мне пришлось бы повторять один и тот же код десятки раз (и еще хуже - я бы, вероятно, создавал частичные классы, чтобы это делать во многих случаях). См. Мой собственный ответ со ссылкой на гораздо более чистое решение. –

+0

Если это поведение, которое вы всегда хотите, я полагаю, что это сделало бы трюк. Он имеет обратную задачу хранения пустых строк, хотя, если столбец является нулевым. – tvanfosson

+0

true, если вы имеете в виду изменение связующего по умолчанию - но тот же ответ также описывает, как это сделать на основе свойств, используя аннотации данных. –

Смежные вопросы