【问题标题】:entity framework - Read TPT data using DBSet<T>.SqlQuery实体框架 - 使用 DBSet<T>.SqlQuery 读取 TPT 数据
【发布时间】:2013-10-10 13:32:43
【问题描述】:

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

一个例子:

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

我们创建一个查询其他TreeITem

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

结果我们得到一个不同对象的列表,其中一些是TreeItemDocsFiles的类型...

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

你知道我们如何实现它吗?

谢谢 ++ 卢多

【问题讨论】:

    标签: .net sql linq entity-framework


    【解决方案1】:

    SqlQeryMSDN 文档中说:

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

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

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

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

    【讨论】:

    • 感谢您的回答,我没有在文档中看到此评论。这是一个坏消息,但我们会尝试解决方法。
    猜你喜欢
    • 2014-04-22
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多