c# - 当我尝试更新实体时,EF6 引发 EntityValidationErrors 异常
问题描述
我在 EF6 中更新实体时遇到问题。代码如下所示:
public PICCOSSourceCost GetCOSSourceCost(int sourceCostID)
{
return ERPContext.PICCOSSourceCost.Where(sc => sc.ID == sourceCostID && !sc.Deleted).FirstOrDefault();
}
public PICCOSSourceCost UpdateCOSSourceCost(PICCOSSourceCost sourceCost, bool saveChanges = true)
{
var sc = GetCOSSourceCost(sourceCost.ID);
if (sc == null)
{
throw new PICObjectNotFoundException<PICCOSSourceCost>(sourceCost, new List<string>()
{
nameof(PICCOSSourceCost.PICCOSSourceID),
nameof(PICCOSSourceCost.PICCOSPriceTypeID),
nameof(PICCOSSourceCost.Price),
nameof(PICCOSSourceCost.EffectiveDate)
});
}
sc.PICCOSSourceID = sourceCost.PICCOSSourceID;
sc.PICCOSPriceTypeID = sourceCost.PICCOSPriceTypeID;
sc.Price = sourceCost.Price;
sc.EffectiveDate = sourceCost.EffectiveDate;
sc.Deleted = sourceCost.Deleted;
sc.CreatedBy = sourceCost.CreatedBy;
sc.CreatedDate = sourceCost.CreatedDate;
sc.LastModifiedBy = sourceCost.LastModifiedBy;
sc.LastModifiedDate = sourceCost.LastModifiedDate;
if (saveChanges) ERPContext.SaveChanges();
return sc;
}
如您所见,“GetCOSSourceCost”方法从 EF 获取实体。而“UpdateCOSSourceCost”方法中的第一个参数“sourceCost”是从 FrontEnd 传入的,也是从 EF6 获取的。当我调试代码时,发生了“System.Data.Entity.Validation.DbEntityValidationException”。我不知道为什么。我认为应该没问题,因为我只是得到一个实体对象,只是更改它的属性并保存更改。是因为有两个对同一个对象的引用吗? 如果我删除属性分配代码,错误就会消失。
一个或多个实体的验证失败。有关更多详细信息,请参阅“EntityValidationErrors”属性。
你知道它为什么会抛出这个异常吗?请帮我。太感谢了!
解决方案
基于此
http://mattrandle.me/viewing-entityvalidationerrors-in-visual-studio/
您可以使用一个特殊的调试器变量-$exception
要查看 EntityValidationErrors 集合,您可以使用下面来显示监视窗口
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
推荐阅读
- angular - ng2-chart 仅在光标位于某个位置时刷新
- selenium - Nightwatch 没有获取 sendkeys 值
- xml - 使用 XSLT 提取和更新 XML
- android - 在基于 MVVM 的应用程序中添加 Room Database 类会产生绑定问题
- ruby-on-rails - 如何在 Active Storage 中仅存储 .yml 文件
- java - 变量是从内部类中访问的,需要声明为final
- sql - Oracle Apex:根据条件在报告中创建红绿灯
- groovy - 无法从规范文件中的 GebConfig.groovy 文件中读取系统变量集
- javascript - html5 画布导航栏的对象数组
- python - Python多处理程序可能出现死锁?