Как структура сущностей обрабатывает даты со значением 0001/01/01 - PullRequest
1 голос
/ 11 августа 2011

Я использую последнюю версию расширений Telerik MVC, ASP.NET MVC 3 с механизмом представления Razor и код Entity Framework 4.1.

Посмотреть модель:

public class EditGrantApplicationViewModel
{
   // Other properties

   public DateTime HospitalisedFromDate { get; set; }
   public DateTime HospitalisedToDate { get; set; }
}

Метод действия контроллера:

public ActionResult Create()
{
   EditGrantApplicationViewModel viewModel = new EditGrantApplicationViewModel();

   return View(viewModel);
}

Создать вид:

<tr>
   <td valign="top"><label>From:</label></td>
   <td>@(Html.Telerik().DatePickerFor(x => x.HospitalisedFromDate)
         .Name("HospitalisedFromDate")
      )<br>
      @Html.ValidationMessageFor(x => x.HospitalisedFromDate)
   </td>
   <td>&nbsp;</td>
   <td valign="top"><label>To:</label></td>
   <td>@(Html.Telerik().DatePickerFor(x => x.HospitalisedToDate)
         .Name("HospitalisedToDate")
      )<br>
      @Html.ValidationMessageFor(x => x.HospitalisedToDate)
   </td>
</tr>

Класс заявки на получение гранта:

public class GrantApplication
{
   // Other properties

   public DateTime HospitalisedFromDate { get; set; }
   public DateTime HospitalisedToDate { get; set; }
}

Контекст:

public class HbfContext : DbContext
{
   public DbSet<Bank> Banks { get; set; }
   public DbSet<AccountType> AccountTypes { get; set; }
   public DbSet<GrantApplication> GrantApplications { get; set; }
   public DbSet<AuditEntry> AuditEntries { get; set; }
}

Таблица подачи заявок на грант:

HospitalisedFromDate datetime null
HospitalisedToDate datetime null

У меня есть пара вопросов относительно дат и того, как код EF 4.1 впервые обрабатывает даты.

Когда представление загружается в первый раз, HospitalisedFromDate и HospitalisedToDate инициализируются как 0001/01/01. Мне не нужно выбирать дату. Поэтому, если ничего не выбрано, он попытается вставить 0001/01/01 в мою таблицу базы данных. И вот когда я получаю ошибку:

Преобразование типа данных datetime2 в тип данных datetime привело к значению, выходящему за пределы допустимого диапазона. \ R \ nОтношение было прекращено.

Как бы это исправить, чтобы оно добавляло значение NULL в столбец таблицы, если ничего не выбрано?

1 Ответ

3 голосов
/ 11 августа 2011

Полагаю, вы знаете, что причина этого в том, что минимальное значение SqlDateTime и минимальное значение c # datetime различны.чтобы иметь значение даты и времени, обнуляемое в c #, вы объявляете это как

public class EditGrantApplicationViewModel
{
   // Other properties

   public DateTime? HospitalisedFromDate { get; set; }
   public DateTime? HospitalisedToDate { get; set; }
}

, делая это, значение по умолчанию для свойств теперь должно быть нулевым

Edit: только длядополнительная информация, объявляющая подобное значение, равное нулю, эквивалентна объявлению его

public class EditGrantApplicationViewModel
{
   // Other properties

   public Nullable<DateTime> HospitalisedFromDate { get; set; }
   public Nullable<DateTime> HospitalisedToDate { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...