Moqentity frameworkExecuteSQLCommand

我已经读过,当使用moq时你无法模拟非虚函数。 我也读过,现在应该可以了。这是真的吗? 如果是这样,那么我想模拟以下查询:

DatabaseContext.Database.ExecuteSqlCommand(updateQuery, newValue); 

我在测试中覆盖了Context

 DAL.Context.DatabaseContext = mockContext.Object; 

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

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

任何想法,也许executeccommand可以替换为其他东西,以便上面的行将捕获任何udpates到集合? 我一次更新多行时由于性能原因使用executionqlcommand。 常规EF太慢了

更新:

阅读以下文章, 如何Moqentity frameworkSqlQuery调用我想知道类似的实现是否适用于ExecuteSQLCommand …

我能做的Mock ExecuteSqlCommand在DataBase类中是不可能做的,就是在我的DbContextinheritance中创建相同的方法,但这次是虚拟的,并调用Database.ExecuteSqlCommand

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

然后,它的工作原理