Я решаю проблему с обновлением объекта перед сохранением в базу данных и получаю странное поведение.
Я использую Entity Framework 4.1 Code-First в веб-приложении ASP.NET MVC 3 . Вот модель:
public class Order
{
public int OrderId { get; set; }
public int CarId { get; set; }
public DateTime BeginRentDate { get; set; }
public DateTime EndRentDate { get; set; }
public decimal RentPrice { get; set; }
public virtual Car Car { get; set; }
}
public class Car
{
public int CarId { get; set; }
public string Brand { get; set; }
public string Model { get; set; }
public string NumberPlate { get; set; }
public decimal RentPrice { get; set; }
}
У каждого автомобиля есть цена аренды. Эта цена должна быть скопирована в RentPrice Заказа при ее создании. Автомобиль выбирается пользователем, поэтому изначально Order.RentPrice равен 0.
Здесь я хочу скопировать значение цены:
[HttpPost]
public ActionResult Create(Order order)
{
order.RentPrice = _context.Cars.Find(order.CarId).RentPrice;
if (ModelState.IsValid)
{
_context.Orders.Add(order);
_context.SaveChanges();
return RedirectToAction("Index");
}
return View(order);
}
Он не работает из-за ошибки в SaveChanges
, у этого объекта есть ошибки проверки. OK. Я обнаружил, что сначала нужно вызвать UpdateModel (order);
, а затем изменить значения.
Итак, что у меня есть. Рабочий код:
_context.Orders.Add(order);
UpdateModel(order);
order.RentPrice = 777;
_context.SaveChanges();
Не рабочий код:
_context.Orders.Add(order);
UpdateModel(order);
order.RentPrice = _context.Cars.Find(order.CarId).RentPrice;
_context.SaveChanges();
Рабочий код (!):
_context.Orders.Add(order);
UpdateModel(order);
var t = (double)_context.Cars.Find(order.CarId).RentPrice;
order.RentPrice = (decimal)t;
_context.SaveChanges();
Кто-нибудь может объяснить, пожалуйста, что здесь происходит? Особенно magic в 3-й и 4-й строках последнего блока кода.
Обновление
Я получаю DbEntityValidationException
: «Проверка не удалась для одного или нескольких объектов. См. Свойство EntityValidationErrors для получения дополнительных сведений. "
Из внутреннего исключения: «OriginalValues не могут использоваться для сущностей в состоянии« Добавлено ».