c# – 实体框架代码优先中的奇怪实体更新
我在保存到数据库之前更新实体并解决了这个问题.
我在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’属性.” 解决方法
当你拿到时
这意味着存在诸如空白或其他约束的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 ); } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- UML依赖,关联,组合,聚合,继承,实现的关系
- ruby-on-rails-3.1 – Rails 3.1,Paperclip,多文
- 【Android数据存储】- SQLite Database
- Cocos2d-x教程(36)-多线程与异步加载
- ruby-on-rails – 使用sidekiq处理两个独立的red
- libmxml (Mini-XML) arm-linux 移植笔记
- 正则表达式 优先级(四)
- reactjs – ‘react-router’不包含名为’Browse
- ajax – Javascript:如何用Jasmine监视superage
- c# – 何时适合使用CacheItemRemovedCallback?