如何清除实体框架对象中的验证结果

时间:2013-09-13 09:46:58

标签: entity-framework unit-testing validation

可以清除与实体框架关联的ObjectContext中的验证结果吗?我想要的是这样的代码:

public void ClearValidationResults (ObjectContext db)
{
        var dbContext = new DbContext(db, true);

        var validationResults = dbContext.GetValidationErrors();

        validationResults.Clear();
}

我想实现此功能,以便在单元测试中用于测试验证规则,而无需在DataBase中保存更改。 感谢。

3 个答案:

答案 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();
}