是否可以防止EF SaveChanges()写入DB?

时间:2010-07-20 20:14:40

标签: .net unit-testing entity-framework

我有基于Entity Framework 4的服务类。我想在充满预先生成的样本数据的数据库上测试它们。问题是:我希望测试,无论是通过还是失败,都不会实际触及数据库,以便它可以重新用于其他测试。

因此,我希望ObjectContext.SaveChanges假装一切都很好,并保持内存中的更改,但默默地省略它们在数据源中的实际持久性。这可能吗?

P.S。我知道存储库模式,但在这种情况下不想使用它。

2 个答案:

答案 0 :(得分:1)

您只需将测试包装在未提交的事务中:

using(var context = new MyObjectContext())
{
    context.Connection.Open();
    using (var transaction = context.Connection.BeginTransaction())
    {
        // Your tests here
        ...

    } // At this point, the transaction is rolled back, since it hasn't been commited
}

答案 1 :(得分:0)

我打算带着这个问题走出去......我知道它适用于linq-to-sql

您可以覆盖上下文/容器中的savechanges方法

并实际删除base.SaveChanges();

看起来像这样:

public override int SaveChanges(SaveOptions options){
   return base.SaveChanges();
}

因此,如果您取消注释此行,您可以根据自己的情况进行调整