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