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