是否有可能在我致电SaveChanges
之前验证我已添加到上下文中的实体并删除无效的实体,以便我不会在保存时EntityValidationErrors
?
我有一个大约3k个实体的列表,其中一些包含阻止所有其他实体保存的无效数据。我不想单独保存每个实体,而是忽略那些有错误的实体。
试图找到解决方案,我发现你可以禁用验证。如果我这样做了,SaveChanges
会忽略无效的并保存其他的吗?
Context.Configuration.ValidateOnSaveEnabled = false;
然而,我更愿意调用一些方法来调用实体验证并将其从上下文中删除。或者甚至可以在将实体添加到上下文之前验证实体?这会更好。
答案 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;