gpt4 book ai didi

entity-framework - Includes 不适用于 LinqKit AsExpandable

转载 作者:行者123 更新时间:2023-12-03 20:30:38 24 4
gpt4 key购买 nike

我正在尝试使用 LinqKit AsExpandable在我的 EfCore2.0项目,我遇到了这个问题,其中 Includes不起作用。

在尝试调试时,我下载了 LinqKit来自 github 的源代码并替换了 Nuget我的项目中的引用与项目引用。

使用 LinqKit 调试时项目,我注意到我给 Include 的电话没有达到我在 ExpandableQueryOfClass<T>.Include 上设置的断点.

我做了一些进一步的测试,并注意到如果我第一次转换为 ExpandableQueryOfClass 会命中断点。 (这是我公开的 LinqKit 中的一个内部类,所以如果我引用了 Nuget 包,我就无法进行转换)。

这是 LinqKit 中的错误吗?还是我做错了什么?

这是我的测试代码。

using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;

using Internal.DAL.Db;
using Internal.Models.Customer;

using LinqKit; // Referencing LinqKit.Microsoft.EntityFrameworkCore
using Xunit;

namespace Internal.EntityFramework.Tests
{
public class UnitTest1
{
private DbContextOptionsBuilder<DataContext> _ctxBuilder =>
new DbContextOptionsBuilder<DataContext>().UseSqlServer(Connection.String);

[Fact]
public async Task SuccessTest()
{
using (var ctx = new DataContext(_ctxBuilder.Options))
{
var query =
(
// this cast is the only difference between the methods
(ExpandableQueryOfClass<Order>)
ctx.Orders
.AsExpandable()
)
.Include(r => r.Customer)
.Take(500);

var responses = await query.ToListAsync();

// this succeeds
Assert.All(responses, r => Assert.NotNull(r.Customer));
}
}

[Fact]
public async Task FailTest()
{
using (var ctx = new DataContext(_ctxBuilder.Options))
{
var query = ctx.Orders
.AsExpandable()
.Include(r => r.Customer)
.Take(500);

var responses = await query.ToListAsync();

// this fails
Assert.All(responses, r => Assert.NotNull(r.Customer));
}
}
}
}

编辑 2018-05-15 : 有一个 open issue在 LinqKit github 存储库上。

最佳答案

我不确定这是 LINQKit 还是 EF Core 的错误(绝对不是你的)。

肯定是由 EF Core 引起的 Include/ThenInclude implementations所有这些都包括对 source.Provider is EntityQueryProvider 的检查如果是 false,什么都不做.

我不确定 EF Core 设计器的想法是什么 - 可能是从 EntityQueryProvider 继承的自定义查询提供程序,但同时该类是基础结构的一部分,并标记为不应使用。

我也不知道 LINQKit 计划如何解决它,但正如您注意到的那样,当前的实现肯定是坏的/不工作的。目前它在我看来更像是一个 WIP。

我目前看到的唯一解决方法是申请 AsExpandable()包含之后。

关于entity-framework - Includes 不适用于 LinqKit AsExpandable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48661790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com