我在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”属性。
您知道为什么会引发此异常吗?请帮我。非常感谢!
答案 0 :(得分:1)
基于此
http://mattrandle.me/viewing-entityvalidationerrors-in-visual-studio/
您可以使用的是特殊的调试器变量-$exception
要查看EntityValidationErrors集合,您可以在下面使用它来显示监视窗口
((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors
答案 1 :(得分:0)
非常感谢您的帮助。我已通过以下链接解决了我的问题: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details 为了这个链接,我调试并找到了实体验证错误的根本原因。一些必填字段设置为NULL值。 答案中的代码非常有用:
try
{
// Your code...
// Could also be before try if you know the exception occurs in SaveChanges
context.SaveChanges();
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State);
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage);
}
}
throw;
}