
我在ASP.NET MVC 3 Web应用程序中使用Entity Framework 4.1 Code-First.这是模型:
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.汽车正由用户选择,因此最初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上的错误导致实体出现验证错误,因此无法正常工作.好.我发现需要先调用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();
有人可以解释一下,这里发生了什么?特别是最后一段代码中第3行和第4行的魔术.
更新
我收到了DbEntityValIDationException:“一个或多个实体的验证失败.有关详细信息,请参阅’EntityValIDationErrors’属性.”
从内部异常:“OriginalValues不能用于处于已添加状态的实体.”
“ValIDation Failed for one or more entitIEs. See
‘EntityValIDationErrors’ property for more details.” From the inner
exception: “OriginalValues cannot be used for entitIEs in the Added
state.”
这意味着存在诸如空白或其他约束的NOT NulL collumns之类的错误,通过调试等检查实体验证错误
try{...catch ( DbEntityValIDationException ex ) {foreach ( var valIDationErrors in ex.EntityValIDationErrors ) { foreach ( var valIDationError in valIDationErrors.ValIDationErrors ) { System.Diagnostics.Trace.Traceinformation( "Property: {0} Error: {1}",valIDationError.Propertyname,valIDationError.ErrorMessage ); } }} 总结 以上是内存溢出为你收集整理的c# – 实体框架代码优先中的奇怪实体更新全部内容,希望文章能够帮你解决c# – 实体框架代码优先中的奇怪实体更新所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)