Я использую Asp.net MVC и Entity Framework (код ниже только для демонстрации)
У меня есть модель, как показано ниже
public class Person
{
[Key]
public int Id { get; set; }
[Required]
public string FirstName { get; set; }
/*Time at which person was created*/
public DateTime CreatedOn { get; set; } /*should not change once created*/
}
Во время создания + вставки нового человека я вручную устанавливаю свойство CreatedOn datetime.
При обновлении
My View имеет только одно текстовое поле
@using (Html.BeginForm())
{
@Html.LabelFor(a => a.FirstName)
@Html.EditorFor(a => a.FirstName)
@Html.ValidationMessageFor(a => a.FirstName)
<br />
<input type="submit" name="name" value="submit" />
}
Контроллер
[HttpPost]
public ActionResult EditPerson(Person person)
{
if (ModelState.IsValid)
{
db.Entry(person).State = EntityState.Modified;
db.SaveChanges();
/* ----------------
Error here
-----------------
*/
return RedirectToAction("ListPerson");
}
return View(person);
}
Я получаю сообщение об ошибке в указанном месте в моем коде, ошибка: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.
Ошибка кажется очевидной, поскольку person
объект, полученный внутри контроллера, имеет значение времени по умолчанию, и структура сущностей пытается обновить это поле.
Мой вопрос заключается в том, как я могу указать платформе сущностей не обновлять свойство . Предположим в приведенном выше случае, если для CreatedOn
свойства, которое я говорю, чтобы сущность не обновляла его, я не получу ошибку.
Я пробовал атрибут [Editable(false)]
на CreatedOn
, но он не работал.
Есть несколько вариантов, например, перед обновлением я сначала загружаю существующую сущность из базы данных и копирую свойство selectedOn .....
Я хочу, чтобы вы знали, что в моей реальной модели есть много свойств, которые я не хочу обновлять, и есть много таких моделей, поэтому я ожидаю некоторых реалистичных ответов.
Редактировать 1
Сначала я использую код.