8

我有一个使用实体框架 4 的现有 MVC 3 应用程序。该模型是使用数据库优先模式生成的。我还有生成类的“自动代码生成”。

今天,我对我的数据库做了一个简单的修改。一个字段从“int”变为“float”。我去了.edmx,右键单击,从数据库更新模型...

但是当我看这个领域时,它根本没有改变。我仔细检查了所有内容,并且数据库已修改,但模型从未更改……这是否意味着我需要手动执行此操作?

我记得我之前(比如 2 个月前)进行了几次更新,当时它似乎可以工作......我需要检查什么可以破坏?

编辑

在 subversion 中查看 edmx 差异文件时,更改似乎已完成,但在“图形模式”中查看时,更改不存在。此外,不会更新生成的代码。

-          <Property Name="PreparationTime" Type="int" Nullable="false" />
+          <Property Name="PreparationTime" Type="float" Nullable="false" />
4

5 回答 5

10

这是正常行为。;-)

即使您执行“从数据库更新模型”向导,如果您只是修改数据库端的内容,您的概念模型也不会改变。请看一下这个SO 答案,我在其中解释了 EDMX 是如何构建的以及它应该如何发展。

于 2013-05-29T08:14:34.553 回答
3

检查清单

  • 检查Output窗口是否在命令期间发生任何错误Update model from database
  • 从 .edmx 属性窗口检查您的数据库连接字符串
  • 任何导致它的自定义代码生成模板?
  • 备份 .edmx 的副本,然后尝试从 .edmx 中删除修改后的实体并重新添加回来
于 2013-05-29T01:02:02.487 回答
2

Try this hack from MSDN

1.Build the project after updating EDMX file.

2.Right click your .tt file in solution explorer.

3.Select "Run Custom Tool" option.

于 2019-04-27T11:35:10.660 回答
1

我知道这是一个老问题,但由于给定的答案在我的情况下不起作用,我想我会把我的解决方案留给有类似问题的其他人。

假设您正在使用 SQL Server Management Studio:

  • 右键单击“数据库图”并选择“新建数据库图”。
  • 包括所有表格(“__MigrationHistory”除外,如果存在)并按“添加”。
  • 尝试再次更新您的 EDMX。

对我来说,这是解决方案,几个月后我一直在为一个 edmx 至关重要的项目使用变通方法,但拒绝再以正常方式更新。一位新同事提到这是可能的解决方法。如果我早点知道的话,我可以节省的时间......

于 2016-08-15T13:34:05.307 回答
0

以上所有答案都没有解决我的问题。这是为我解决问题的方法:

检查您的警告部分,您要在模型中更新/添加的表没有必要的元素(例如缺少主键)。更新您的数据库表以修复警告,然后更新您的模型。

于 2020-07-27T13:15:35.917 回答