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

时间:2010-06-01 05:48:44

标签: entity-framework

如果您从数据库构建edmx文件然后数据库发生更改,那么如何让模型获取更改?

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

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

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

我刚开始。

10 个答案:

答案 0 :(得分:67)

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

来强制打开设计器

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

默认情况下刷新所有实体,只有在您选择新实体时才会添加新实体。


编辑: 如果不是很清爽。

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

答案 1 :(得分:17)

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

答案 2 :(得分:4)

这可能对你们有所帮助。(我已将其应用于我的项目)

以下是3个简单的步骤。

  1. 转到解决方案资源管理器。查找 .edmx 文件(通常在根级别找到
  2. 打开.edmx文件,出现模型图窗口。右键单击该窗口上的任意位置,然后选择“从数据库更新模型”。将出现更新向导窗口。单击“完成”以更新模型。
  3. 保存.edmx文件。
  4. 就是这样。它将根据数据库中的更改同步/刷新您的模型。

    详细说明。请访问以下链接。

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

答案 3 :(得分:2)

无法自动更新CodeFirst模型。我也不推荐。 因为代码优先的一个好处是你可以使用POCO类。如果你改变了这个POCO课程,你就不会想要一些自动生成的代码来破坏你的工作。

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我不知道为什么它不会自动更新,但在您构建解决方案后,您删除或修改的任何模型类或模板都会在您"之后从数据库中更新。重建解决方案"

它适用于我的Visual Studio 2015!

答案 6 :(得分:0)

这里:

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

答案 7 :(得分:0)

不过,您需要小心一点, 您需要完全按照删除前的设置来设置EDMX文件(如果您选择删除/重新生成路由),否则,代码和EF生成的模型之间的命名不匹配(尤其是用于复数和单数化)< / p>

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

答案 8 :(得分:0)

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

答案 9 :(得分:-2)

我一直致力于一个不太大的项目,它包含了Entity Framework,大约十几个表,以及大约15个存储过程和函数。经过数周的开发,尝试刷新我的表和存储过程已经产生了混合的结果,只要成功更新模型。有时这些变化是有效的,大部分时间都不是。简单的列更改(更改顺序,添加,删除或重命名)有时会起作用,大多数情况下都不会。 Visual Studio似乎在刷新方面遇到的问题多于添加新问题。它还表现出更多的问题,即存储的proc更改未被反映,尤其是在添加,删除或重命名列时。我没有检测到任何一致的行为,所以我不能说“这种类型的更改将始终更新,这种类型的更改不会”。

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