EF核心使用列表定义查询,而不是dbcontext中的dbset

发布于 2025-02-08 00:49:38 字数 1183 浏览 1 评论 0原文

在EF核心中,使用modelBuilder可以针对这样的无钥匙实体定义查询:

modelBuilder.Entity<UrlResource>()
    .ToInMemoryQuery(() => context.Blogs.Select(b => new UrlResource { Url = b.Url }));

对于单元测试,我想使用查询列表而不是DBSET,例如:

var urlResources = new List<UrlResource>() { ... }.AsQueryable();

modelBuilder.Entity<UrlResource>()
    .ToInMemoryQuery(() => urlResources);

但是,在这种情况下,我获得的例外,无法翻译LINQ表达式。消息。

或为此...

var urlResources = new List<UrlResource>() { ... };

modelBuilder.Entity<UrlResource>()
    .ToInMemoryQuery(() => urlResources.AsQueryable());

...此异常:

system.argumentException:类型'system.collections.generic.list'1 [urlresource]'的表达式无法用于类型'system.linq.iqueryable的参数1 [urlresource]'system.linq.iqueryable`1 [urlresource]其中[urlresource](system.linq.iqueryable`1 [urlresource],system.linq.expressions.expressions.expression.1 [system.func'2 [2 [urlresource] [urlresource] [urlresource] [urlresource] urlresource,system.boolean]])'(参数'arg0')

我在没有成功的情况下测试了几种变体。

有人知道解决这个问题的方法吗?
任何帮助都将受到赞赏。提前致谢!

In EF Core using the modelBuilder a query can be defined for keyless entities like this:

modelBuilder.Entity<UrlResource>()
    .ToInMemoryQuery(() => context.Blogs.Select(b => new UrlResource { Url = b.Url }));

For unit testing I would like to use a list for the query instead of a dbset, like this:

var urlResources = new List<UrlResource>() { ... }.AsQueryable();

modelBuilder.Entity<UrlResource>()
    .ToInMemoryQuery(() => urlResources);

But in that case I get an exception with the The LINQ expression could not be translated. message.

Or for this ...

var urlResources = new List<UrlResource>() { ... };

modelBuilder.Entity<UrlResource>()
    .ToInMemoryQuery(() => urlResources.AsQueryable());

... this exception:

System.ArgumentException : Expression of type 'System.Collections.Generic.List`1[UrlResource]' cannot be used for parameter of type 'System.Linq.IQueryable`1[UrlResource]' of method 'System.Linq.IQueryable`1[UrlResource] Where[UrlResource](System.Linq.IQueryable`1[UrlResource], System.Linq.Expressions.Expression`1[System.Func`2[UrlResource,System.Boolean]])' (Parameter 'arg0')

I tested several variations without success.

Does anybody know a way how to solve this problem?
Any help is appreciated. Thanks in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文