【问题标题】:DbContext.Entities.FromSqlRaw is not implemented?DbContext.Entities.FromSqlRaw 没有实现?
【发布时间】:2020-08-08 16:59:04
【问题描述】:

(.Net 核心 3.1,EF 核心 3) 我有以下 xUnit/Moq 设置:

private readonly IDbContext _dbContext;

public MyTests()
{
    var contextMock = new Mock<IDbContext>();
    var dbSetMock = new List<MyEntity>
    {
        new MyEntity("...", "A"),
        new MyEntity("...", "B"),
        new MyEntity("...", "C"),
        new MyEntity("...", "D"),
    }.AsQueryable().BuildMockDbSet();
    contextMock.Setup(x => x.MyEntities).Returns(dbSetMock.Object);
    _dbContext = contextMock.Object;
}

public async Task GetValueTest()
{
    var sut = new GetValueQueryHandler(_dbContext);
    var result = await sut.Handle();
    result.IsSuccess.ShouldBeTrue();
}

在函数GetValueQueryHandler.Handler()中,它调用

var ids = _dbContext.MyEntities.FromSqlRaw(sql);

但是,它会引发错误?

方法或操作没有实现。

在 Microsoft.EntityFrameworkCore.RelationalQueryableExtensions.FromSqlOnQueryable[TEntity](IQueryable`1 源,字符串 sql,对象 [] 参数) 在 MockQueryable.TestAsyncEnumerable`1.CompileExpressionItem[TResult](表达式表达式) 在 MockQueryable.TestAsyncEnumerable`1.System.Collections.Generic.IEnumerable.GetEnumerator() 在 Portal.Application.Restrictions.Queries.GetSymbolsAndTypes.GetSymbolsAndTypesQueryHandler.c__DisplayClass4_0.g__GetIds|0>d.MoveNext()

【问题讨论】:

    标签: c# entity-framework-core moq xunit


    【解决方案1】:

    FromSql* 操作是关系操作。它们旨在在关系数据源上调用。

    我假设您正在使用 MockQueryable 包来创建模拟集。该包只是一个异步可枚举/异步查询提供程序实现,它不支持关系操作。 Microsoft 内存提供程序也不支持关系操作。

    我怀疑您需要使用提供此类支持的库。 EntityFrameworkCore.Testing 确实(免责声明,我是作者),我相信还有其他人。

    【讨论】:

    • 你有签名的nuget版本吗?
    • 暂时没有
    猜你喜欢
    • 2011-03-04
    • 2017-04-28
    • 1970-01-01
    • 2023-03-31
    • 2017-12-27
    • 2020-06-17
    • 2020-07-19
    • 2013-04-06
    • 2017-10-13
    相关资源
    最近更新 更多