【问题标题】:Tool to convert Entity Framework EDMX to Code First将实体框架 EDMX 转换为代码优先的工具
【发布时间】:2011-11-12 03:02:41
【问题描述】:

是否有将 edmx 转换为代码优先的工具? 我知道不久前有人说 CTP 中出现了一个,但我找不到与此相关的任何更新。

MSDN forums 上有一个人写了自己的文章(尚不可用),但 EF 团队没有。

【问题讨论】:

  • 在我看来,对于简单的情况,您只需使用自定义 T4 模板即可。

标签: .net entity-framework code-first edmx


【解决方案1】:

使用 EF6 工具和 Visual Studio 2013 或 Visual Studio 2012,您首先从数据库中获取选项代码(参见下面的屏幕截图)

如果您没有看到此选项,您需要安装适用于 Visual Studio 2012 和 2013 的 Entity Framework 6 Tools http://www.microsoft.com/en-gb/download/details.aspx?id=40762

这不会首先将 EDMX 转换为代码(如问题所要求的那样),但它可以先从现有数据库创建代码(我假设有人想从 EDMX 执行此操作,将拥有现有数据库,除非他们删除了他们的数据库)。

【讨论】:

  • 这不能回答问题。
【解决方案2】:

截至 2013 年 1 月 30 日,EF Power Tools (Beta 3) 是最新版本的 EF 电动工具,适用于 EF4.2-EF6。

【讨论】:

  • 除了电动工具不按要求做。除非添加了新功能。
  • @PilotBob 来自该链接:What does it add to Visual Studio?>When right-clicking on a C# project>Reverse Engineer Code First
  • 它对数据库进行逆向工程,而不是您现有的 EDMX 数据模型和映射。
  • @PilotBob 虽然我同意你的观点,它不会对 EDMX 进行逆向工程,但 DermFrench 的上述答案在一年多后发布于 “EF6 工具和 Visual Studio” 在撰写本文时有 16 个赞成票,但该工具也没有对 EDMX 进行逆向工程。
  • 丝印哟!但是,你妈妈有没有告诉过你,“生活不公平”? ;)
【解决方案3】:

时代变迁。有几个生成器将使用 EDMX 作为源来创建代码优先实体和映射。扩展库中有几个。您最有可能想要使用的是 EF 5.x DBContextFluent Generator for C#。 http://visualstudiogallery.msdn.microsoft.com/5d663b99-ed3b-481d-b7bc-b947d2457e3c

还有 EF 5.x DbContect Generator,iirc 将映射信息放在模型上。

安装其中任何一个后,您可以编辑 EDMX 并右键单击“添加代码生成项”。这将安装 .tt 模板并生成实体类、DbContext 类和映射文件。

请注意,如果您有任何带有验证的部分,如果您将它们放在与 edmx 相同的文件夹中,并且与实体名称相同,它们将被覆盖。您只需要重命名这些部分,因为生成器确实将部分关键字放在实体上,或者更好的是,将该代码移动到新生成的实体类中。

一旦这些文件就位,您就可以删除 .tt 文件和 .edmx 文件,然后继续在代码中维护您的实体。

【讨论】:

  • 我刚刚试用了“EF 5.x DbContext Generator for C#”,它工作得很好,除了它没有移植到我的映射上。 EF 5.x DBContextFluent 会抛出异常。
  • @PilotBob 你能告诉我如何使用它吗?
  • @WalterStabosz 有一些修复。它不喜欢 TPH 上的 Null / Not Null 鉴别器,我解决了这个问题。此外,如果您看到 QA 并且并不总是映射 FK,我必须手动添加。
【解决方案4】:

没有这样的工具,因为 EDMX 提供了更多无法转换为代码优先的功能。唯一可用的工具是EF Power Tools CTP1,它允许从现有数据库创建代码优先映射,但它只会创建数据库的 1:1 映像 = 基于数据库的命名、无继承、无拆分等。电动工具还允许创建读取仅来自现有代码优先映射的 EDMX。

【讨论】:

  • 逆向工程师到 Code First 设施似乎正是我们所需要的。我们一直在从我们的数据库中更新 EDMX,所以它应该可以正常工作。
  • “没有这样的工具,因为 EDMX 提供了更多无法转换为代码优先的功能”,这对我来说没有意义。完全没有。如果您可以从数据库创建类,那么您应该能够从那些完全相同的类创建类似的数据库。当然,EF 制作了更多无法翻译回来的内容,但它们当然可以获取数据库的要点。否则的话听起来很狂热。就像“无论他们做什么都是可以做到的最好的,不要质疑它。”
  • 如果做不到,@LadislavMrnka,那么他们做错了。这似乎是荒谬的。绝对愚蠢到令人难以置信。再来一次:如果做不到,那他们就做错了。
  • @vbullinger:没有人说这些功能将来不会首先在代码中可用。它被称为迭代增量开发。没有公司会在第一个版本中发布具有所有可能功能的软件。如果您认为它非常不正确,您可以随时参与纠正 - EF 是开源的。
  • 据我所知,MSFT 放弃了 Model First,现在所有的努力都转向 Code First。数据注释,ASP.NET Identity 是 Model First 的两个最大缺失特性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-01
相关资源
最近更新 更多