EF核心使用列表定义查询,而不是dbcontext中的dbset
在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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论