【问题标题】:Confusion on DB First Approach and POCO Generation using EF5使用 EF5 对 DB First Approach 和 POCO 生成感到困惑
【发布时间】:2012-12-19 02:04:53
【问题描述】:

当我执行创建 .edmx 文件的数据库优先方法时,我对 VS.NET 2012 中的 EF5 发生了什么感到有些困惑。我感到困惑的原因是,关于 EF 4.x 的信息太多了,我相信很多与 EF5 相关的信息都不准确。

在 EF4 中,要使用具有数据库优先方法的 POCO,需要创建 POCO 类,并确保设置 Code Generation Strategy = None。然后创建一个单独的“实体”类,该类继承自“ObjectContext”,该类具有我们的 POCO 类的知识,可与 EF 一起使用。

在带有 VS.NET 2012 的 EF5 中,当我使用数据库优先方法时,Code Generation Strategy = None 已经设置,并且默认生成的类T4 模板,似乎已经为我创建了 POCO 类。生成的类在ObjectContextDBContext 上没有继承。现在自动生成的实体是这样默认创建为 POCO 类的吗?

如果答案是“是”,我真的很喜欢。我的主要问题是,我可以将那些 POCO 类拉到另一层吗?现在它们显示在“MyModel.tt”下,所以如果我删除它们,我想如果我更新模型,任何更改都不会反映,对吗?

谢谢!

【问题讨论】:

    标签: entity-framework visual-studio-2012


    【解决方案1】:

    在 EF4 中,要使用具有数据库优先方法的 POCO,可以创建 POCO 类,并确保设置代码生成策略 = 没有。然后创建一个单独的说“实体”类,它继承自 `ObjectContext' 了解我们使用的 POCO 类 与英孚。

    这是一个核心理念,但您也可以使用从 VS Gallery 下载的其他 T4 模板,它会为您生成 POCO 类。

    在带有 VS.NET 2012 的 EF5 中,当我使用数据库优先方法时,代码 生成策略 = None 已设置,并且生成的类 由默认的 T4 模板生成,似乎已经创建了 POCO 为我上课。结果类没有继承 ObjectContext 或 DBContext。这是自动生成实体的方式吗 现在默认创建为 POCO 类?

    是的。 VS 2012 默认使用 T4 模板从模型生成 POCO 类。

    我可以将那些 POCO 类拉到另一层吗?现在他们 显示在“MyModel.tt”下,所以如果我删除它们,我想有 如果我更新模型,更改将不会反映,对吗?

    可以,但有一些限制。您可以将整个 .tt 文件移动到另一个文件夹或项目,您只需更新此文件中的路径以指向 EDMX 文件的正确位置。 .tt 文件是负责生成 POCO 类的 T4 模板。主要限制可能是自动更新 - 在默认配置下,模板会在保存 EDMX 文件时自动更新和保存。保存模板将触发所有 POCO 类的重新生成(= 另一个限制 - 不要修改那些自动生成的类)。当您将模板移动到另一个项目时,此自动魔术不起作用,您必须从 .tt 文件的上下文菜单中手动触发 Run custom tool 以强制重新生成类。

    【讨论】:

    • 这个想法是将这些 POCO 类移动到我的域/业务层,它应该对 EF 一无所知。如果我将 .tt 文件与类一起移动到我的域层,我是否仍在创建/显示对 EF 的依赖项?我是否应该在创建这些类后直接删除这些类并断开进一步使用 .tt 文件和自动更新的需要?
    • .tt 文件是设计时功能。它只是生成类文件的工具。您可以考虑 .tt 文件,例如从源数据格式转换为输出数据格式。在您的情况下,源格式是 EDMX (=XML),输出数据格式是 C# 类文件。 .tt 文件不是已编译程序集的一部分(除非您手动将其添加为资源),并且它不会为该程序集带来 EF 依赖。
    • 知道大多数人在这种情况下会做什么吗?是否将这些自动生成的 POCO 类从 .edmx 移到单独的层中?也许我应该在域层中手动创建我的 POCO,并根据需要连接到 EF。你怎么看?
    • 我认为大多数开发人员都在使用 .tt 文件来保持他们的实体与模型同步,如果他们想保持 EF 相关代码分离,他们会将 tt 文件移动到其他项目 - 我自己做了几次.NET 4.0 和 VS 2010 的时代。只有当您想将一些特殊逻辑直接放入属性中并且此类逻辑不是全局且无法从 EDMX 文件中推断出来时,通常才会编写自己的 POCO 类。
    • 我认为使用 Partial 类仍然是用额外的业务逻辑或方法来补充 POCO 类的方法,对吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-05
    • 2021-11-28
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多