2

出于性能考虑,我们必须使用DbSet<T>.SqlQuery从数据库中检索实体。但是这个实体是几个继承类型的基类型。EF DbSet与 Linq 一起使用时,当我们查询它时,EF实例化了正确的类型,而我们查询基本类型。这是非常感谢的!

一个例子:

Base type : TreeItem
Derived types : Docs, Folder, Files

我们创建一个查询 other TreeITem

from item in DbCtxt.TreeItem
where <predicate>
select item:

结果我们得到了一个不同对象的列表,其中一些是TreeItemor Docsor Files...

但是现在我们想使用我们自己的 SQL 查询进行查询,我们没有实现获得继承的类型,而只是TreeItem.

你知道我们怎样才能实现它吗?

谢谢++卢多

4

1 回答 1

0

在它的MSDN文档中SqlQery说:

返回的实体始终是该集合的类型,而不是派生类型。如果查询的一个或多个表可能包含其他实体类型的数据,则必须适当编写 SQL 查询以确保仅返回正确类型的实体。

这意味着您只能单独查询派生类型,例如

context.Set<Folder>()
       .SqlQuery("SELECT * FROM TreeItem WHERE Discriminator = 'folder'")

如果这意味着您需要执行三个查询,则可能会破坏获得最佳性能的目的。

于 2013-10-10T23:21:24.907 回答