将Entity Framework EDMX转换为Code First的工具

34
有没有将edmx转换为Code-First的工具? 我知道以前有人谈到在CTP中出现这个工具,但我找不到任何相关更新。 在MSDN论坛上有一个人写了自己的工具(目前还不可用),但EF团队没有提供该工具。

在我看来,对于简单的情况,您可以使用自定义T4模板完成这个任务。 - Craig Stuntz
4个回答

32

使用EF6工具和Visual Studio 2013或Visual Studio 2012,您可以选择从数据库中先生成代码(请参见下面的截图)。

enter image description here

如果您没有看到此选项,则需要安装适用于Visual Studio 2012和2013的Entity Framework 6工具。http://www.microsoft.com/en-gb/download/details.aspx?id=40762 这并不会将EDMX转换为Code First(如问题所请求的那样),但它可以从现有数据库创建Code First(我假设某人希望从EDMX进行此操作,将拥有一个现有的数据库,除非他们删除了他们的数据库)。

2
这并没有回答问题。 - Nick Coad

27

时代在变化。有几个生成器可以使用EDMX作为源来创建代码优先的实体和映射。扩展库中有多个这样的生成器。您最有可能想要使用的是 EF 5.x DBContextFluent Generator for C#。

http://visualstudiogallery.msdn.microsoft.com/5d663b99-ed3b-481d-b7bc-b947d2457e3c

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

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

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

完成这些文件的安装后,您可以删除.tt文件和.edmx文件,并从此开始在代码中维护实体。


1
我刚试用了“EF 5.x DbContext Generator for C#”,它的表现相当不错,但是它没有移植我的映射。而且EF 5.x DBContextFluent会抛出异常。 - Walter Stabosz
@PilotBob 你能告诉我如何使用它吗? - Bilal Fazlani
@WalterStabosz,已经进行了一些修复。它不喜欢在TPH上使用Null / Not Null鉴别器,我绕过了这个问题。此外,如果您看到QA并且并不总是映射FKs,我必须手动添加。 - PilotBob

9
由于EDMX提供了无法转换为Code-First的更多功能,因此没有这样的工具。唯一可用的工具是EF Power Tools CTP1,它允许从现有数据库创建Code-First映射,但它只会创建与数据库相同的1:1映像=基于数据库的命名,没有继承,没有拆分等。Power tools还允许从现有的Code-First映射创建只读EDMX。

20
没有这样的工具,因为EDMX提供了更多无法转换为Code-First的功能。对我来说完全没有意义。如果可以从数据库创建类,那么应该能够从这些精确相同的类创建类似的数据库。当然,EF会产生更多无法转换回来的东西,但他们肯定可以得到数据库的主要内容。否则这种说法听起来只是一种"粉丝行为",就像"无论他们做什么,都是最好的,不要质疑"。 - vbullinger
11
如果不能做到,@LadislavMrnka,那么他们做错了。似乎荒谬得不能做到这一点。完全令人难以置信地愚蠢。再说一遍:如果不能做到,那么他们做错了。 - vbullinger
6
@vbullinger说:没有人说那些功能将来不会在代码优先模式中变得可用。这被称为迭代增量开发。任何公司都不会在第一版中发布具有所有可能功能的软件。如果您认为它非常不正确,您可以随时参与修正 - EF 是开源的。 - Ladislav Mrnka
1
不错的观点,Ladislav。而且,既然已经有工具可以完成其中的一部分(例如有些工具可以先反向工程代码),我想离实现这个目标也不远了。我只是觉得他们做错了,因为代码应该以生成的方式呈现,以便您可以将其作为“代码优先”使用。否则就没有意义了。 - vbullinger
3
据我所知,微软已经放弃了“模型优先”(Model First)的开发方式,现在全部转向“代码优先”(Code First)。数据注释(Data Annotations)和ASP.NET身份验证(ASP.NET Identity)是“模型优先”中最重要的两个缺失功能。 - Dave
显示剩余3条评论

-1

1
除非添加了新功能,否则电源工具无法执行所请求的操作。 - PilotBob
从那个链接中:它为Visual Studio添加了什么?>当右键单击C#项目>反向工程代码优先 - dav_i
5
它反向工程数据库,而不是您现有的EDMX数据模型和映射。 - PilotBob
虽然我同意你的看法,即它不能反向工程化EDMX,但DermFrench在一年之后发布的答案“EF6工具和Visual Studio”获得了16个赞,这有点不公平,因为该工具也不能反向工程化EDMX。 - user585968
截屏哟!但是,你妈妈从来没有告诉过你,“生活是不公平的”吗? ;) - PilotBob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接