更新edmx以反映数据库中所做的更改(.net linq到实体) 所以我做了我的edmx 然后我稍微更改了一下数据库,将列从NOTNULL更改为允许NULL 我进入我的edmx,右键单击并选择“从数据库更新模型”

更新edmx以反映数据库中所做的更改(.net linq到实体) 所以我做了我的edmx 然后我稍微更改了一下数据库,将列从NOTNULL更改为允许NULL 我进入我的edmx,右键单击并选择“从数据库更新模型”,linq,entity-framework,.net-3.5,linq-to-entities,Linq,Entity Framework,.net 3.5,Linq To Entities,现在我进入我的程序,它实际上还没有更新。。。我不能在列中输入空值。我必须做什么才能正确更新edmx?谢谢。从数据库中选择更新模型是更新EDMX的最佳方法。某些特性不会在概念图层上更新 通过在模型查看器工具箱中查看存储层,确保存储层已更新。如果存储已正确更新,那么您就没事了,并且您的数据库处于同步状态。如果是这样,请进入可视化设计器,单击该字段,转到属性,并更新概念侧的NotNull属性。从EDMX更新/删除并不总是有效的。如果在单击“从数据库更新模型”时模型没有得到更新,比如在数据库中更新视图/

现在我进入我的程序,它实际上还没有更新。。。我不能在列中输入空值。我必须做什么才能正确更新edmx?谢谢。

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


通过在模型查看器工具箱中查看存储层,确保存储层已更新。如果存储已正确更新,那么您就没事了,并且您的数据库处于同步状态。如果是这样,请进入可视化设计器,单击该字段,转到属性,并更新概念侧的NotNull属性。

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

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

这应反映您对EDMX数据库所做的任何更改。它很笨重,但工作完美无瑕


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

是的,它大部分时间都不起作用:-/

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


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

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


在上述情况下…向相关表中添加主键导致“从数据库更新模型”正常工作。

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

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


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

我成功地做到了这一点(VB.Net)

  • 根据需要/需要对数据库进行更新
  • 在EDMX模型中选择“从数据库更新”,图形模型将正确显示新结构/表格
  • 展开项目,使其显示所有相关文件
  • 两个扩展名为“tt”的文件才是最重要的:首先,取一个没有.Context的文件。在tt分机之前。右键单击它并选择“运行自定义工具”:
  • 对带有.Context的.tt文件执行相同的操作。以它的名义。所有代码和逻辑模型类都将更新

  • 这是最快最简单的方法:

  • 从.edmx图表中删除视图/表
  • 现在使用数据库中的更新模型将表添加回
  • 这个答案更好:


    任何手动编辑都可能出现错误,或者在使用向导之类的工具时会丢失。使用向导进行删除和更新要好得多

    1.更新EDMX文件后生成项目

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

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

    这将更新.tt文件


    资料来源:

    从designer视图中删除所有表,然后进行更新

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

    • 在edmx文件上单击鼠标右键
    • 选择“用…打开”
    • 选择“自动编辑器选择器(XML)”
    • 单击“查找”并搜索视图名称
    在EDMXXML中,我发现:

    “生成过程中发现错误:警告6013:表/视图”(视图 名称)“”没有定义主键,也没有有效的主键 无法推断。此表/视图已被排除。若要使用 实体,您将需要检查模式,添加正确的键,然后 取消注释。”


    我修改了视图,使其具有主键。然后,我打开edmx设计器并运行“从数据库更新模型…”,然后视图按预期出现在设计器中,没有出现错误。

    遗憾的是,在VS 2010 RC2中,它仍然可以正常工作。我同意——这会适得其反,而且容易出错。删除EDMX文件是唯一经过100%验证的工作方式。Huagati有一个工具可以刷新EDMX文件,但它不是免费的。我对列大小进行了更新,但在数据模型中没有刷新,因此这是不可靠的。最好的选择是重新添加实体或手动更改属性(如我的情况)。谢谢你的回答。是的,你可以这样做,但是你没有从数据库获得所有更新,这一点也不奇怪吗?我不想在数据库中每次更改模式时都添加删除实体…对我来说,这是非常低效的…“3)搜索并删除xml实体元素”有人能详细说明一下这一步需要做什么吗?当您需要在属性或StoreGeneratedPattern上指定枚举类型之类的内容时,删除实体以重新添加它们是不可接受的,因为这会导致