Tôi đang giải quyết vấn đề với việc cập nhật pháp nhân trước khi lưu vào cơ sở dữ liệu và có hành vi lạ.Thực thể lạ cập nhật trong Khuôn khổ thực thể Mã-Đầu tiên
Tôi đang sử dụng Khuôn khổ thực thể 4.1 Mã-đầu tiên trong ứng dụng web ASP.NET MVC 3. Đây là mô hình:
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; }
}
Mỗi xe có giá thuê. Giá này phải được sao chép vào RentPrice của Lệnh khi tạo. Chiếc xe được lựa chọn bởi người dùng để ban đầu Order.RentPrice là 0.
Ở đây tôi muốn sao chép giá trị giá:
[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);
}
Nó không làm việc vì một lỗi trên SaveChanges
rằng thực thể có lỗi xác nhận. ĐƯỢC. Tôi thấy rằng trước tiên cần phải gọi UpdateModel(order);
và sau đó thay đổi giá trị.
Vì vậy, những gì tôi có. đang làm việc:
_context.Orders.Add(order);
UpdateModel(order);
order.RentPrice = 777;
_context.SaveChanges();
Không đang làm việc:
_context.Orders.Add(order);
UpdateModel(order);
order.RentPrice = _context.Cars.Find(order.CarId).RentPrice;
_context.SaveChanges();
đang làm việc (!):
_context.Orders.Add(order);
UpdateModel(order);
var t = (double)_context.Cars.Find(order.CarId).RentPrice;
order.RentPrice = (decimal)t;
_context.SaveChanges();
Ai đó có thể giải thích, xin vui lòng, những gì đang xảy ra ở đây? Đặc biệt là ma thuật trên dòng 3 và 4 trong khối mã cuối cùng.
Cập nhật
Tôi nhận được DbEntityValidationException
: "Validation thất bại cho một hoặc nhiều tổ chức Xem tài sản 'EntityValidationErrors' để biết thêm chi tiết.." Từ ngoại lệ bên trong: "Không thể sử dụng OriginalValues cho các thực thể trong trạng thái Đã thêm."
Bạn có nhận thấy bạn có hai dấu chấm phẩy ở cuối đơn đặt hàng.RentPrice = _context.Cars.Find (order.CarId) .RentPrice ;; -> ở bên cạnh khối mã cuối cùng? – Jack
lỗi xác thực trên phương thức SaveChanges là gì? Mã trong phương thức Create ban đầu của bạn hoạt động tốt cho tôi. – agradl
@Jack, chỉ là lỗi chính tả khi viết bài. Đã sửa. –