【问题标题】:EF CTP5 which code generation item to choose?EF CTP5 选择哪个代码生成项?
【发布时间】:2011-07-09 10:42:59
【问题描述】:

随着 EF 4.1 的推出和 CTP5 的推出几个月,我决定尝试新功能。如我所见,有多个可用的生成项(DbContext 和三个不同的ObjectContext's)。我还注意到它们不可互换——我第一次在我的一个应用程序中使用 POCO ObjectContext,今天切换到 DbContext,我的整个存储库都坏了。它基于LoadProperty() 方法、DeleteObject()AddObject() 方法,而在DbContext 生成中使用的DbSet 类中都缺少这些方法。

我知道http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-1-introduction-and-model.aspx 这里有一个很棒的博客系列介绍了新功能,但它从未真正说明何时选择什么。

我的要求是:

  • ASP.NET MVC 应用,好懒 加载大部分不会在页面上工作 渲染它会说上下文有 已经被处置(这就是为什么我 需要对显式的简单支持 加载 - 在 EF4 中我通过 Include(),使用我做的 POCO 上下文 通过LoadProperty() 和现在 在DbContext 我相信我会用 强类型 Include())。
  • 我们可能不需要代码优先 功能(但你永远不知道)。

【问题讨论】:

  • 理想情况下,答案将为每个可用选项提供优缺点

标签: entity-framework-4 asp.net-mvc-3 poco entity-framework-ctp5 ef-code-first


【解决方案1】:

这两者之间的区别主要在于API and feature setDbContext 当然有 Include 用于查询和 Load 但你会在其他地方找到它。此外,当使用 CTP5 程序集时,您将为 ObjectSetDbSet 输入强类型 Includeavailable on IQueryable interface 作为扩展方法)。

显式加载(相当于LoadProperty)由Load 方法在DbReferenceEntry<T>DbCollectionEntry<T> 上执行 - 检查Explicit loading related entities。它比LoadProperty 效果更好,因为您可以定义过滤器进行加载。

【讨论】:

    【解决方案2】:

    您从错误的假设开始,即您不能在 MVC 中使用延迟加载。

    如果您在更高级别管理上下文,您将能够毫无问题地做到这一点。

    【讨论】:

    • 查看使用 NHibernate 的每个请求会话的许多示例。一个 NH ISession 大致对应一个 EF DbContext
    • 我没有使用 NHibernate,但我确实有带有 Ninject 的 IoC 和每个请求的上下文,我想就是这样。然而,此配置中的延迟加载不适用于 POCO 上下文,但它适用于 DbContext(今天刚刚尝试过)。
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 2018-10-13
    相关资源
    最近更新 更多