数据库
首页 > 数据库> > Moq实体框架ExecuteSQLCommand

Moq实体框架ExecuteSQLCommand

作者:互联网

我已经读过,使用最小起订量时不能模拟非虚函数.我也读过,现在应该有可能了.是真的吗?
如果是这样,那么我想模拟以下查询:

DatabaseContext.Database.ExecuteSqlCommand(updateQuery, newValue);

我在测试中覆盖了上下文

DAL.Context.DatabaseContext = mockContext.Object;

我已经尝试过此设置,但查询仍然消失了,我的常规数据库

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

有什么想法,也许可以将executesql命令替换为其他内容,以便上面的行捕获到该集合的所有udpate?由于性能原因,我在一次更新多行时使用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);

然后,它起作用

标签:moq,c,entity-framework
来源: https://codeday.me/bug/20191121/2049209.html