无法调用公共实例方法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

AddOrUpdate扩展方法的描述如下:

"调用SaveChanges时按键添加或更新实体。相当于数据库术语中的"upsert"操作。此方法在使用迁移播种数据时非常有用。"

我发现,当我试图嘲笑这个,我实际上是完全错误的使用它。关于"播种时有用"的部分引起了我的思考。你不需要调用这个来更新实体对象。SaveChanges()可以做到这一点,只要您已经从上下文中获得了对象。

可能不是你想要的答案(而且晚了6个月),但也许其他人会重新考虑他们使用这种方法。