出于性能考虑,我们必须使用DbSet<T>.SqlQuery
从数据库中检索实体。但是这个实体是几种继承类型的基类型。
在Linq中使用EF DbSet
,当我们查询它时,EF
会设置正确的类型,而我们会查询基类型。非常感谢!
一个例子:
Base type : TreeItem
Derived types : Docs, Folder, Files
我们创建了一个查询其他TreeITem
:
from item in DbCtxt.TreeItem
where <predicate>
select item:
结果我们得到了一个不同对象的列表,其中一些是TreeItem
或Docs
或Files
...
但现在我们想要使用我们自己的SQL查询进行查询,但我们无法获得继承类型,只能TreeItem
。
你知道我们怎么能实现它吗?
由于 ++ 卢多
答案 0 :(得分:0)
在SqlQery
的{{3}}文档中,它说:
返回的实体始终是此集的类型,而不是派生类型。如果查询的表可能包含其他实体类型的数据,则必须正确编写SQL查询,以确保只返回正确类型的实体。
这意味着您只能单独查询派生类型,例如
context.Set<Folder>()
.SqlQuery("SELECT * FROM TreeItem WHERE Discriminator = 'folder'")
如果这意味着您需要执行三个查询,则可能会失去获得最佳效果的目的。