可以清除与实体框架关联的ObjectContext中的验证结果吗?我想要的是这样的代码:
public void ClearValidationResults (ObjectContext db)
{
var dbContext = new DbContext(db, true);
var validationResults = dbContext.GetValidationErrors();
validationResults.Clear();
}
我想实现此功能,以便在单元测试中用于测试验证规则,而无需在DataBase中保存更改。 感谢。
答案 0 :(得分:5)
DbContext
不存储验证错误,每次调用DbContext.GetValidationErrors()
或DbContext.SaveChanges()
时都会验证实体。因此,如果您的上下文跟踪了一个无效的实体,DbContext.GetValidationErrors()
将始终返回错误。您需要分离或修复无效的实体/实体,并且错误将消失,因为您的上下文不会跟踪无效的实体。
答案 1 :(得分:2)
清除实体本地存储。
当我们将实体添加到Collection时,它会将其添加到其本地存储中,并且我们不断收到错误,因为该实体的本地存储不明确且仍有旧条目。所以你清除实体本地行。
dbContext.EntityName.Local.Clear();
答案 2 :(得分:-3)
每次需要清除验证错误时,我都会通过创建一个新的ObjectContext对象来解决问题。不是最优雅的解决方案,但它的工作原理。由于此过程是在单元测试的上下文中,并且单元测试足够快,我将维护此代码,直到最佳解决方案到达。
public void ClearValidationResults (ObjectContext db)
{
db = new MyObjectContext();
}