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

  • 因此,我制作了edmx。
  • 然后,我对数据库进行了一些更改,将列从NOT NOT NULL更改为允许NULL。
  • 我进入edmx,右键单击并选择“从数据库更新模型”

现在我进入程序,它实际上没有更新...我不能在该列中输入null。 我该怎么做才能正确更新edmx? 谢谢。

11个解决方案
81 votes

从EDMX更新/删除并不总是起作用。 如果在单击“从数据库更新模型”后模型没有得到更新,则假设您在数据库中更新了视图/表后,请执行以下操作:

1)从模型图中删除视图/表
2)将EDMX切换到xml视图(右键单击edmx文件,然后选择“打开方式”)
3)搜索并删除xml实体元素
4)切换回EDMX视图
5)单击从数据库更新模型

这应该反映您对数据库对EDMX所做的任何更改。 它很麻烦,但是可以完美地工作。

在理想的世界中,我希望数据库更新模型能够将数据库中的更改同步到EDMX。 但是,它在大多数时间都不起作用。

pencilslate answered 2020-07-10T04:06:46Z
20 votes

我成功完成的工作就是这个(VB.Net)。

  1. 根据需要/要求对数据库进行更新
  2. 在EDMX模型中选择“从数据库更新”,图形模型将正确显示新的结构/表
  3. 展开项目,使其显示所有相关文件
  4. 扩展名为“ tt”的两个文件很重要:首先使用不带.Context的文件。 tt扩展名之前。 右键单击它,然后选择“运行自定义工具”:

run custom tool

  1. 使用.Context对.tt文件执行相同的操作。 以它的名字。 您的所有代码和逻辑模型类都将更新。
Peter Klein answered 2020-07-10T04:07:28Z
14 votes

从数据库中选择更新模型是更新EDMX的最佳方法。 有些概念在Conceptual层上不会更新。

通过在模型查看器工具箱中查看您的商店图层,确保它已更新。 如果商店已正确更新,那么您就可以了,并且数据库已同步。 如果是这样,请进入可视设计器,单击该字段,转到属性,然后更新“概念”侧的NotNull属性。

bendewey answered 2020-07-10T04:05:55Z
5 votes

是的,它在大多数时间都无效:-/

“最佳方法”(因为它系统地起作用)是删除EDMX文件并再次生成它。但是不要忘记删除App.config中的连接字符串(否则VS2008向导将在默认实体名称后添加后缀),并清除缓存。

我希望这些工具在下一个版本中能更好地工作,因为它会大大降低生产率。

littlesteps answered 2020-07-10T04:07:57Z
4 votes

这是最快的方法:

  1. 从.edmx图中删除视图/表。
  2. 现在使用“数据库更新模型”重新添加表。
stackPusher answered 2020-07-10T04:08:26Z
4 votes

1.更新EDMX文件后构建项目。

2.在解决方案资源管理器中右键单击您的.tt文件。

3.选择“运行自定义工具”选项。

这将更新.tt文件。

资料来源:这里!

jagad89 answered 2020-07-10T04:09:04Z
2 votes

在VS的XML编辑器中打开edmx文件,并检查尝试更新时是否生成了错误。

  <!--Errors Found During Generation:
      warning 6013: The table/view 'foo.dbo.snafu' does not have a primary key   
      defined and no valid primary key could be inferred. This table/view has  
      been excluded. To use the entity you will need to review your schema,  
      add the correct keys and uncomment it.

  <EntityType Name="snafu">
    <Property Name="snafu_column" Type="smallint" />
  </EntityType>-->

在上述情况下...向有问题的表添加主键导致“从数据库更新模型”起作用。

w4ik answered 2020-07-10T04:09:28Z
2 votes

这个答案更好:[https://stackoverflow.com/a/23886016/1014884]

任何手动编辑都容易出错,或者在有人使用任何工具(如向导)时丢失。 使用向导删除和更新要好得多。

BillDarcy answered 2020-07-10T04:09:52Z
1 votes

例如,它不会更新字符串属性的最大长度!

如果使用TFS,则删除文件不是很好,您想要保留历史记录而不影响其他文件。

对我来说,它有一个很小的单独项目,可以用来完全重新创建edmx文件,我在xml中打开它,将粘贴复制到现有的文件中,然后在模型中移动一个形状,以便VS重新创建.cs文件。 。 瞧,现在已更新。

mape1082 answered 2020-07-10T04:10:22Z
1 votes

我在数据库中创建的视图未出现在设计器中(选择“从数据库中更新模型...”并在视图名称旁边添加一个检查后)。 在将EDMX切换到xml视图之前,我没有看到任何错误消息:

  • 右键单击edmx文件
  • 选择“打开方式...”
  • 选择“自动编辑器选择器(XML)”
  • 单击查找并搜索您的视图名称

在edmx xml中,我发现:

“生成期间发现错误:警告6013:表/视图'(视图 名称)没有定义主键,也没有有效的主键 可以推断。 该表/视图已被排除。 要使用 实体,您需要查看自己的架构,添加正确的密钥,并 取消注释。”

我将视图修改为具有主键。 然后,我打开edmx设计器并运行“从数据库更新模型...”,然后视图按预期方式出现在设计器中,没有任何错误。

DeveloperDan answered 2020-07-10T04:11:13Z
0 votes

从设计器视图中删除所有表并在之后更新对我有用

alexey answered 2020-07-10T04:11:33Z
translate from https://stackoverflow.com:/questions/690248/updating-your-edmx-to-reflect-changes-made-in-your-db-net-linq-to-entities