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

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);

然后,它起作用

10-08 18:56