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

时间:2009-03-27 15:34:22

标签: linq entity-framework .net-3.5 linq-to-entities

  • 所以我制作了edmx。
  • 然后我稍微更改了我的数据库,将列更改为从NOT NULL变为允许NULL。
  • 我进入我的edmx,右键单击并选择“从数据库更新模型”

现在我进入我的程序并且它实际上没有更新...我不能在列中放置null。如何正确更新edmx?谢谢。

11 个答案:

答案 0 :(得分:81)

从EDMX更新/删除并不总是有效。如果在单击“从数据库更新模型”时未更新模型,请说明在更新数据库中的视图/表时,请执行以下操作:

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

这应该反映您对DB到EDMX所做的任何更改。这很麻烦,但完美无瑕。

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

答案 1 :(得分:19)

我成功完成的是(VB.Net)。

  1. 根据需要/要求对数据库进行更新
  2. 在EDMX模型中选择“从数据库更新”,图形模型将正确显示新结构/表格
  3. 展开项目以显示所有相关文件
  4. 具有“tt”扩展名的两个文件是重要的:首先取一个没有.Context的文件。在tt扩展之前。右键单击它并选择“运行自定义工具”:
  5. run custom tool

    1. 使用.Context对.tt文件执行相同操作。在它的名字。您的所有代码和逻辑模型类都将更新。

答案 2 :(得分:14)

从数据库中选择更新模型是更新EDMX的最佳方法。某些属性未在Conceptual图层上更新。

通过在“模型查看器”工具箱中查看,确保已更新“商店”图层。如果商店已正确更新,那么您没问题,您的数据库也是同步的。如果是这样,请进入可视化设计器,单击该字段,转到属性,然后在Conceptual端更新NotNull属性。

答案 3 :(得分:5)

是的,它在大多数情况下都不起作用: - /

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

我希望这些工具能够在下一个版本中更好地工作,因为它会显着降低生产力......

答案 4 :(得分:4)

这是最快捷的方式:

  1. 从.edmx图中删除视图/表格。
  2. 现在使用数据库中的更新模型重新添加表格。

答案 5 :(得分:4)

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

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

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

这将更新.tt文件。

来源:here

答案 6 :(得分:2)

在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>-->

在上述情况中......向相关表中添加主键导致“从数据库更新模型”起作用。

答案 7 :(得分:2)

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

任何手动编辑都是成熟的错误,或者当有人使用任何工具(例如向导)时会丢失。使用向导删除和更新要好得多。

答案 8 :(得分:1)

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

如果您使用TFS,删除文件并不好,您希望保留历史记录而不影响其他人。

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

答案 9 :(得分:1)

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

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

在edmx xml中,我发现:

  

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

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

答案 10 :(得分:0)

从设计器视图中删除所有表,并在此之后进行更新