- 所以我制作了我的 edmx。
- 然后我稍微更改了我的数据库,将列从 NOT NULL 更改为允许 NULL。
- 我进入我的 edmx,右键单击并选择“从数据库更新模型”
现在我进入我的程序,它实际上并没有更新......我不能在列中放置一个空值。我该怎么做才能正确更新 edmx?谢谢你。
现在我进入我的程序,它实际上并没有更新......我不能在列中放置一个空值。我该怎么做才能正确更新 edmx?谢谢你。
从 EDMX 更新/删除并不总是有效。如果模型在单击从数据库中更新模型时没有更新,假设您在数据库中更新了视图/表,请执行以下操作:
1)从模型图中删除视图/表
2)将 EDMX 切换到 xml 视图(右键单击 edmx 文件并选择“打开方式”)
3)搜索并删除 xml 实体元素
4)切换回 EDMX 视图
5)单击从数据库更新模型
这应该反映您对数据库所做的任何类型的更改到您的 EDMX。这很麻烦,但可以完美运行。
在一个理想的世界中,我希望数据库中的更新模型能够将数据库中的更改同步到 EDMX。但是,它在大多数情况下都不起作用。
从数据库中选择更新模型是更新 EDMX 的最佳方法。某些属性不会在概念层上更新。
通过在 Model Viewer 工具箱中查看 Store 层,确保其已更新。如果 Store 已正确更新,那么您就可以了,并且您的数据库已同步。如果是这样,请进入可视化设计器,单击该字段,转到属性,然后更新概念侧的 NotNull 属性。
是的,它大部分时间都不起作用:-/
“最好的方法”(因为它可以系统地工作)是删除 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>-->
在上述情况下......向相关表添加主键导致“从数据库更新模型”工作。
这个答案更好:https ://stackoverflow.com/a/23886016/1014884
任何手动编辑都可能出现错误,或者当有人使用任何工具(如向导)时会丢失。使用向导删除和更新要好得多。
例如,它不会更新字符串属性的最大长度!
如果您使用 TFS,删除文件是不好的,您希望保留历史记录而不影响其他人。
对我来说,它有一个单独的小项目,我可以用它来完全重新创建 edmx 文件,我在 xml 中打开它,将粘贴复制到现有的,然后在模型中移动一个形状,以便 VS 重新创建 .cs 文件. 瞧,它现在已更新。
我在数据库中创建的视图没有出现在设计器中(在选择“从数据库更新模型...”并在视图名称旁边添加一个检查之后)。在将 EDMX 切换到 xml 视图之前,我没有看到任何错误消息:
在 edmx xml 中我发现:
“在生成过程中发现错误:警告 6013:表/视图'(视图名称)'没有定义主键,并且无法推断出有效的主键。此表/视图已被排除。要使用实体,您将需要检查您的架构,添加正确的键,然后取消注释。”
我修改了视图以具有主键。然后我打开 edmx 设计器并运行“从数据库更新模型...”,然后视图按预期出现在设计器中,没有错误。
从设计器视图中删除所有表格并在之后更新对我有用