无法调用公共实例方法AddOrUpdate
本文关键字:实例方法 AddOrUpdate 调用 | 更新日期: 2023-09-27 18:02:07
在嘲笑我的ApplictionDbContext
时,我得到了AddOrUpdate
方法的错误。
DbSet
在上下文中是虚拟的。
测试方法:
this.db.ExpensesDocuments.AddOrUpdate(doc);
我的测试方法:
[Fact]
public void AddOrUpdateExpenses_Success()
{
// arrange
var mockSet = new Mock<DbSet<ExpensesDocument>>();
var mockContext = new Mock<ApplicationDbContext>();
mockContext.Setup(m => m.ExpensesDocuments).Returns(mockSet.Object);
var provider = new ExpensesProvider(mockContext.Object);
// act
bool result = provider.AddOrUpdateExpenses(new ExpensesDocument());
// assert
}
错误:
Result Message: System。InvalidOperationException:无法调用在派生的IDbSet类型上使用实例方法AddOrUpdate"Castle.Proxies.DbSet"1代理"。方法未找到。
我使用Moq4
框架进行模拟和xUnit
进行测试。
AddOrUpdate扩展方法的描述如下:
"调用SaveChanges时按键添加或更新实体。相当于数据库术语中的"upsert"操作。此方法在使用迁移播种数据时非常有用。"
我发现,当我试图嘲笑这个,我实际上是完全错误的使用它。关于"播种时有用"的部分引起了我的思考。你不需要调用这个来更新实体对象。SaveChanges()可以做到这一点,只要您已经从上下文中获得了对象。
可能不是你想要的答案(而且晚了6个月),但也许其他人会重新考虑他们使用这种方法。