Estoy solucionando el problema con la actualización de la entidad antes de guardarla en la base de datos y obtuve un comportamiento extraño.Extraña actualización de entidad en Entity Framework Code-First
Estoy usando Entity Framework 4.1 Code-First en la aplicación web ASP.NET MVC 3. Aquí está el modelo:
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; }
}
Cada coche tiene un precio de alquiler. Este precio debe copiarse en RentPrice de Order al crear uno. El coche es la selección por el usuario por lo que inicialmente Order.RentPrice es 0.
Aquí quiero copiar valor del precio:
[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);
}
No está funcionando debido a un error en la SaveChanges
esa entidad tiene errores de validación. DE ACUERDO. Descubrí que primero es necesario llamar al UpdateModel(order);
y luego cambiar los valores.
Así que lo que tengo. el código de trabajo:
_context.Orders.Add(order);
UpdateModel(order);
order.RentPrice = 777;
_context.SaveChanges();
No código de trabajo:
_context.Orders.Add(order);
UpdateModel(order);
order.RentPrice = _context.Cars.Find(order.CarId).RentPrice;
_context.SaveChanges();
código de trabajo (!):
_context.Orders.Add(order);
UpdateModel(order);
var t = (double)_context.Cars.Find(order.CarId).RentPrice;
order.RentPrice = (decimal)t;
_context.SaveChanges();
¿Puede alguien explicar, por favor, ¿qué está pasando aquí? Especialmente magia en la 3ª y 4ª líneas en el último bloque de código.
actualización
Me estoy DbEntityValidationException
: "Error en la validación de una o más entidades Ver propiedad '' EntityValidationErrors para más detalles.". De la excepción interna: "OriginalValues no se puede usar para entidades en el estado Agregado".
Notaste que tenías dos puntos y comas al final de la orden.RentPrice = _context.Cars.Find (order.CarId) .RentPrice ;; -> en el siguiente al último bloque de código? – Jack
¿Cuáles son los errores de validación en el método SaveChanges? El código en su método Create inicial funciona bien para mí. – agradl
@Jack, solo un error tipográfico al escribir una publicación. Fijo. –