我正在使用EF 5和Code First POCO。
这是存储库的SaveChanges实现:
public virtual List<DbEntityValidationResult> SaveChanges()
{
var errors = new List<DbEntityValidationResult>();
try
{
DbContext.SaveChanges();
}
catch (DbEntityValidationException ex)
{
errors.AddRange(ex.EntityValidationErrors);
}
return errors;
}
单个验证错误导致没有实体写入数据库。我原本期望写出有效实体并接收无效实体的错误。
EF应该如何行动?
答案 0 :(得分:2)
这就是EF的工作方式。
SaveChanges()
创建一个事务并尝试保存上下文中的所有更改。
如果由于任何原因导致任何写入失败,则回滚整个事务并且不会保留任何更改。
答案 1 :(得分:0)
我做了一些挖掘。 EEF不会尝试编写实体。它首先调用Object Context中的验证。如果任何实体失败,它们将被添加到DbValidationResult并取消保存。
对于批量交易,您可以删除这些实体并处理任何错误,然后重新保存。
所有实体验证后,EF会根据需要将更改写入数据库。