c# - Moq Entity Framework ExecuteSQLCommand

标签 c# entity-framework moq

我读到在使用最小起订量时不能模拟非虚函数。我还读到现在应该可以做到这一点。是真的吗? 如果是这样,那么我想模拟以下查询:

DatabaseContext.Database.ExecuteSqlCommand(updateQuery, newValue);

我在我的测试中覆盖了 Context

DAL.Context.DatabaseContext = mockContext.Object;

我试过这个设置,但似乎查询仍然与我的常规数据库不符

mockContext.Setup(c => c.Set<AppSalesAndResult>()).Returns(mockBudgetData.Object);

任何想法,也许可以将 executesqlcommand 替换为其他内容,以便上面的行可以捕捉到集合的任何更新?由于性能原因,我在一次更新多行时使用 executesqlcommand。常规 EF 太慢

更新:

阅读以下帖子,How to Moq Entity Framework SqlQuery calls我想知道类似的实现是否适用于 ExecuteSQLCommand ...

最佳答案

为了能够模拟 ExecuteSqlCommand,我所做的是在我的 DbContext 继承中创建相同的方法,但这次是虚拟的,并调用 Database.ExecuteSqlCommand,这在 DataBase 类中是不可能的

public class MyDbContext : DbContext
{
    public virtual int ExecuteSqlCommand(string sql, params object[] parameters)
    {
        return Database.ExecuteSqlCommand(sql, parameters);
    }
    public virtual int ExecuteSqlCommand(TransactionalBehavior transactionalBehavior, string sql, params object[] parameters)
    {
        return Database.ExecuteSqlCommand(transactionalBehavior, sql, parameters);
    }

然后我更改了我的业务代码以调用这个创建的方法(不是数据库方法):

DatabaseContext.ExecuteSqlCommand(updateQuery, newValue);

然后,它起作用了

关于c# - Moq Entity Framework ExecuteSQLCommand,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26664431/

相关文章:

c# - 处理大量文本字符串

c# - 将复杂的数据结构从 C# 传递到 native dll

c# - 将 "default"登录系统用于新的 MVC 应用程序

c# - 使用 Linq 从两个表中获取数据

c# - 如何使用 Moq 创建带有 JSON 正文的模拟 HTTP 发布请求

c# - Moq多接口(interface)问题

c# - 将结构从 C# 程序共享到 C++ win32 DLL 的最佳实践?

c# - 使用 Entity Framework 将数据保存在一个事务中的多个表中

asp.net-mvc - ASP MVC - 多对多关系

.net - 如何查找已传递给我的模拟(Moq 或 Rhino Mocks)接口(interface)上的方法的值?