在保存和从上下文中删除之前验证实体

时间:2016-02-15 08:12:52

标签: c# entity-framework

是否有可能在我致电SaveChanges之前验证我已添加到上下文中的实体并删除无效的实体,以便我不会在保存时EntityValidationErrors

我有一个大约3k个实体的列表,其中一些包含阻止所有其他实体保存的无效数据。我不想单独保存每个实体,而是忽略那些有错误的实体。

试图找到解决方案,我发现你可以禁用验证。如果我这样做了,SaveChanges会忽略无效的并保存其他的吗?

Context.Configuration.ValidateOnSaveEnabled = false;

然而,我更愿意调用一些方法来调用实体验证并将其从上下文中删除。或者甚至可以在将实体添加到上下文之前验证实体?这会更好。

2 个答案:

答案 0 :(得分:7)

直接解决方案是在保存之前验证它们,并将这些实体分离出来。

foreach (var error in dbContext.GetValidationErrors())
{
    dbContext.Entry(error.Entry).State = EntityState.Detached;
}

但它更像是一种解决方法。 IMO你应该更早地避免验证错误(例如在api层中),而不是阻止在数据层中保存。

答案 1 :(得分:1)

使用 ViewData.ModelState.Errors;

查找模型属性
  foreach (var item in ViewData.ModelState.Keys)
            {
                int err=ViewData.ModelState[item].Errors.Count();
                if (err.Equals(1))
                {
                  // Add property name in a list 
                }
            }

之后使用

排除这些属性
 db.Entry(model).State = EntityState.Modified;
 db.Entry(model).Property(x => x.Token).IsModified = false;