实体框架:当数据库更改时,如何刷新模型?


68

如果从数据库构建edmx文件,然后数据库更改,那么如何获取模型来进行更改?

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

我看到一则帖子提到“更新您的模型” rt。在edmx文件上使用鼠标命令,但是我看不到它。

更新edmx以反映数据库中所做的更改(.net linq-to-entities)

我才刚开始。


4
它不在edmx文件上,而是在图形界面上。双击鼠标左键在图形编辑器中打开edmx,然后在其中找到“更新模型”。
LukLed 2010年

Answers:


83

您是在查看设计器视图还是代码视图?您可以通过右键单击EDMX文件,然后选择Open With -> ADO.NET Entity Data Model Designer

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

默认情况下,所有实体都会刷新,只有在选择新实体后才添加它们。


编辑:如果它不是很好刷新。

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

右键单击edmx文件时,没有看到“笔式-> ADO.NET实体数据模型设计器”选项,但其他选项可用。我想知道为什么,但是您提供了一个有效的答案。ty。
乍得2010年

右键单击edmx文件并选择打开,然后选择数据模型设计器
Mehmet Eren Yener 2014年

4
是否可以通过编程方式执行此操作?我想将其作为构建过程的一部分。
ʀʀʏ2014年

1
刚刚更改了ForeignKeys。他们没有刷新。必须从模型中删除表,然后再次添加。
托米

如果您发现更新不按预期方式工作可以看到参考---- stackoverflow.com/questions/15545469/...
渔阳建

19

我发现设计器“从数据库更新”只能处理小的更改。如果您删除了表,更改了外键或使用了函数映射更改了(gasp)存储过程的签名,最终将陷入混乱状态,您将必须删除所有实体并“从数据库添加”或者只是删除edmx资源并重新开始。


“从数据库更新”向导替换了SSDL,但仅对CSDL应用了一些更改。结果,当您进行更复杂的更改时,SSDL和CSDL往往不同步,从而导致您看到的“混乱状态”。我有一个插件,可以为VS2010中的EF4设计器解决此问题;它比较了三层(DB,SSDL,CSDL)中的每一层,显示了所有差异,并允许您有选择地同步差异。如果您想试用该插件,可以在huagati.com/edmxtools上下载该插件并获得试用许可证。
KristoferA

4

这可能对您有所帮助。(我已将其应用到我的项目中)

这是3个简单的步骤。

  1. 转到您的解决方案资源管理器。查找.edmx文件(通常在根目录下找到
  2. 打开该.edmx文件,将出现“模型图”窗口。右键单击该窗口上的任意位置,然后选择“从数据库更新模型”。一个更新向导窗口。单击完成以更新您的模型。
  3. 保存该.edmx文件。

而已。它将根据数据库上的更改同步/刷新模型。

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

带有ASP.NET MVC的EF数据库优先:更改数据库并更新其模型。


注意。谢谢你的建议。
比姆·加西亚

2

无法自动更新CodeFirst Model。我也不推荐。因为代码首先带来的好处之一是您可以使用POCO类。如果更改了此POCO类,则您不希望某些自动生成的代码破坏您的工作。

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


1

这里:

  1. 从EDMX设计器中删除表
  2. 重建项目/ SLN(这将清除模型类)
  3. 从数据库更新模型(已读取所需的所有表)
  4. 重建项目/ SLN(这将重新创建包含新列的模型类)

1

不过,您需要注意,您需要完全按照删除前的样子设置EDMX文件(如果您选择删除/重新生成路由),否则,代码和EF生成的模型之间的命名不匹配(特别是用于复数和单数)

希望这可以防止您头疼=)


0

我只需要更新.edmx模型。“模型/运行自定义工具”选项无法为我刷新字段,但是一旦打开图形设计器,便能够手动重命名字段。


0

双击.edmx文件,然后右键单击屏幕上的任意位置,然后选择“从数据库更新模型”。在新窗口中,转到“刷新”选项卡,然后选择更改的表/视图,然后单击“完成”。


-2

我一直在研究一个不太大的项目,该项目合并了Entity Framework,大约十二个表以及大约15个存储的proc和函数。经过数周的开发,就成功更新模型而言,尝试刷新我的表和存储的过程产生了混合的结果。有时更改是有效的,但大多数时候却没有效果。有时可以进行简单的列更改(更改顺序,添加,删除或重命名),大多数情况下无效。Visual Studio似乎在刷新方面有更多问题,而不仅仅是添加新问题。它还会出现更多问题,无法反映存储的proc更改,尤其是在添加或删除或重命名列时。我没有检测到任何一致的行为,所以我不能说“这种类型的更改将始终被更新,而这种类型的更改将不会”。

最终结果是,如果您想要100%有效的解决方案,请从项目中删除EDMX文件,将“添加新”项添加到项目中(ADO.NET实体数据模型),并确保对模型名称使用相同的名称。每次都有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.