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

Stu*_*dad 44 linq linq-to-entities entity-framework .net-3.5

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

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

pen*_*ate 81

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

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

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

在理想的世界中,我希望数据库中的更新模型能够同步从DB到EDMX的更改.但是,它在大多数情况下都不起作用.

  • Huagati有一个刷新edmx文件的工具,但它并不是免费的.http://www.huagati.com/dbmltools/ (2认同)

Pet*_*ein 20

我成功完成的是这个(VB.Net).

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

运行自定义工具

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


ben*_*wey 14

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

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

  • 他在问题中说"更新模型"不起作用.虽然信息丰富,但您的帖子实际上并没有解决问题. (11认同)
  • 我同意,在模型浏览器中查看时 - 模型部分已更新,但存储部分包含旧元数据,无法更改其中的属性。 (2认同)

小智 5

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

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

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

  • 可悲的是,在VS 2010 RC2中它仍然有效.我同意 - 它的反作用和容易出错.删除EDMX文件是唯一100%经过验证的方式使其正常工作. (2认同)