Экранирование свойств обнуляемого домена с помощью ViewModel

Я использую Entity Framework 4.0 и использую объекты POCO. Когда я заполняю объекты POCO из БД, я преобразую значения свойств в мои собственные объекты Домена, которые мы можем назвать моей Моделью.

Обязательно, будут ли поля моей Модели иметь значение Nullable, зависит от того, соответствует ли значение, которое она отображает в базе данных, столбцу NULL или NOT NULL. Я выиграл'не вдаваться в подробности, но значения должны быть обнуляемыми в БД, потому что пользователь может частично сохранить черновик объекта перед его публикацией в открытом доступе. В этом случае у меня есть несколько полей, которые можно обнулять. Так что давайте'скажем, моя модель выглядит так:

public class MyModel
{
   public int? Field1 {get; set; }
   public DateTime? Field2 {get; set; }
   public int Field3 {get; set; }
}

Если я использую эту модель в своем представлении с полями, допускающими обнуляемость, я получаю ошибки, которые говорят мне, что я не могу использовать обнуляемые свойства в качестве значений в различных местах, например, в HTML-помощниках и т. Д. Я мог бы сказать что-то вродеif (Model.MyBoolField.HasValue && Model.MyBoolField.Value) { // etc }, но это кажется громоздким для представления.

Я подумал о создании объекта ViewModel, который наследует от моего исходного объекта домена и имеетnewненулевые версии моих пустых полей, которые возвращают соответствующее значение, если базовая версия равна нулю. Так что-то вроде:

public class MyViewModel : MyModel
{
   public new int Field1
   {
      get { return base.Field1 ?? 7; }
   }

   public new DateTime Field2
   {
      get { return base.Field2 ?? DateTime.Now; }
   }
}

Моя проблема в том, что я невсегда хорошо знаюдефолт" значение для отображения. Что делать, если я выбросил исключение в View Model?s получатель, когда базовое значение равно нулю? Это плохая практика? Я

Я в основном ищу лучшую практику о том, как обрабатывать обнуляемые поля в модели, особенно при отображении в представлении.

Ответы на вопрос(2)

Ваш ответ на вопрос