首页 > 解决方案 > 当我尝试更新实体时,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”属性。

你知道它为什么会抛出这个异常吗?请帮我。太感谢了!

标签: c#

解决方案


基于此

http://mattrandle.me/viewing-entityvalidationerrors-in-visual-studio/

您可以使用一个特殊的调试器变量-$exception

要查看 EntityValidationErrors 集合,您可以使用下面来显示监视窗口

((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors

推荐阅读