2010-06-01 135 views
34

如果从数据库构建edmx文件,然后数据库发生更改,那么如何让模型获取更改?实体框架:如何在数据库更改时刷新模型?

您是否删除整个模型并重新生成,或者您是否可以检测到更改?

我看到一篇文章提到“更新您的模型”rt。鼠标在edmx文件上的命令,但我没有看到它。

Updating your edmx to reflect changes made in your db (.net linq-to-entities)

我刚刚开始。

+4

它不是在edmx文件上,而是在图形界面。通过双击左键在图形编辑器中打开edmx,你会在那里找到'更新模型'。 – LukLed 2010-06-01 09:11:50

回答

43

您是否在看设计师或代码视图?您可以强制设计师通过右键点击你的EDMX文件打开并选择Open With -> ADO.NET Entity Data Model Designer

右键单击EDMX设计师的设计表面上,然后单击Update Model From Database...

所有实体默认刷新,新的实体中只添加如果你选择它们。


编辑: 如果它不清爽。

  • 在EDMX设计器中选择所有表和视图。
  • 删除它们。
  • 然后,从数据库
+0

右键单击edmx文件时没有看到“笔用 - > ADO.NET实体数据模型设计器”选项,但其他选项可用。我想知道为什么,但你提供了一个有效的答案。 TY。 – ChadD 2010-06-02 15:33:14

+0

右键单击edmx文件,然后选择打开,然后选择数据模型设计器 – 2014-02-11 15:07:22

+3

是否可以通过编程方式执行此操作?我想把它作为我的构建过程的一部分。 – 2014-10-05 20:28:14

14

更新模型我已经找到了设计师“从数据库更新”只能处理小的变化。如果你已经删除表,改变的外键或(gasp)用函数映射改变了存储过程的签名,你最终会得到这样一个混乱的状态,你将不得不删除所有的实体,并“从数据库中添加”或者干脆删除edmx资源并重新开始。

+0

“从数据库更新”向导取代了SSDL,但仅对CSDL进行了一些更改。因此,当你有更复杂的更改时,SSDL和CSDL往往不同步,导致你看到的'混乱状态'。 我有一个加载项可以解决VS2010中EF4设计器的这个问题;它比较三层(DB,SSDL,CSDL)中的每一层,显示所有的差异,并允许您选择同步差异。如果你想尝试一下,你可以在http://www.huagati.com/edmxtools/下载加载项并获得试用许可证。 – KristoferA 2010-09-02 02:44:34

0

我只是需要更新.edmx模型。模型/运行自定义工具选项没有为我刷新字段,但是一旦打开了图形设计器,我就可以手动重命名这些字段。

1

这可能会帮助你们。(我已经应用了我的项目)

这里有3个简单的步骤。

  1. 转到您的Solution Explorer中。寻找的.edmx文件(通常的根目录下找到
  2. 。打开.edmx文件,将出现一个模型图表窗口。右键单击该窗口上的任意位置,然后选择“从数据库更新模型”。将出现一个更新向导窗口。点击完成更新您的模型。
  3. 保存.edmx文件。

就是这样。它会同步/刷新你的模型库,对你的数据库进行更改。

有关详细说明。请访问下面的链接。

EF Database First with ASP.NET MVC: Changing the Database并更新其模型。

+0

注意。谢谢你的建议。 – 2017-06-10 03:19:32

1

更新CodeFirst模型不可能自动执行。我也不建议。 因为代码的优点之一是你可以使用POCO类。如果您更改了此POCO类,则不希望某些自动生成的代码破坏您的工作。

但是,您可以创建一些模板解决方案添加您更新/添加的实体到新模型。然后收集并移动您的新cs文件到您的工作项目。 这样你就不会有冲突,如果它是一个新的实体,你可以简单地将相关的cs文件添加到现有的项目。如果它是一个更新,只需从文件中添加一个新属性即可。 如果您只需将一些列添加到一个或两个表中,您可以手动将它们添加到POCO类中,而不需要任何额外的工作,这就是使用Code-First和POCO类的美妙之处。

0

我不知道为什么它不会自动更新,但是在您构建解决方案后,一旦您删除或修改了任何模型类或模板,您将从数据库更新“重建解决方案”

它适用于我的Visual Studio 2015!

相关问题