【问题标题】:Entity Framework: Exclude columns from the selection in Entity Framework?实体框架:从实体框架中的选择中排除列?
【发布时间】:2010-08-31 15:48:03
【问题描述】:

我想要一个返回跟踪实体(不是静态数据)的 ObjectQuery,但我不希望它加载所有列,我希望某些列加载为 null,我不想使用 select,因为这将返回值的 IEnumerable,而不是跟踪的对象。

有办法吗?

如果是,我该如何完成按需重新加载这些列?

【问题讨论】:

    标签: entity-framework visual-studio-2010 .net-4.0 entity-framework-4


    【解决方案1】:

    您是否尝试过创建视图然后映射视图?

    通过创建视图,您可以选择真正需要的列,并且只有那些会显示在实体模型上。

    【讨论】:

    • 是的,我试过了。但是在 EF 中映射视图是不可能的!阅读我在发布此问题之前发布的另一个问题(我实际上是在对那个问题感到沮丧后发布了这个问题):stackoverflow.com/questions/3581034/…
    【解决方案2】:

    我认为唯一的方法是创建不包含您不需要的列的新实体类型。您将将此实体类型映射到同一个表。按需(延迟)加载仅适用于导航属性。

    编辑:

    我之前的想法不起作用,但在某些特殊情况下,您可以使用来自 article 的想法。您将建模与 1:1 关系相关的多个实体,而不是从单个表中建模单个实体。正如我之前的想法所假设的那样,实体不会在属性中重叠(主键除外),因为它不起作用。然后,您将拥有包含要立即加载的字段的主要实体以及在需要时将延迟加载的相关实体。

    【讨论】:

    • 这个想法+1,但是您是否以这种方式进行了测试并且它有效?您确定模型将允许同一张表使用多种类型吗?另外,我将如何在这两种类型(即 TableFull、TableSummary)之间进行映射?
    • 好吧,我的错。我确信这应该是可能的,但快速测试告诉我 EF 团队再次让我失望了。将两个不相关的实体映射到同一张表看起来像个大问题。它以实体共享主键的错误开始,并且通过一些黑客解决此问题只会引发其他问题。
    • 我觉得 Entity Framework 是个好主意,只是可惜它是由微软的懒惰团队管理的。因为缺少很多关键功能。有没有比EF更好的产品(有设计师)?
    猜你喜欢
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多