【问题标题】:Updating models from database in Entity Framework 6.0在 Entity Framework 6.0 中从数据库更新模型
【发布时间】:2014-05-02 22:51:44
【问题描述】:

我正在开发一个 Web API 服务(在 Visual Studio 2013 中),并在我的解决方案中添加了 ADO.NET 实体数据模型(数据库优先)。

我包含的所有表格都在我的 edmx 图表中正确创建。

然后我做了一些更改:我在源数据库中添加了两个新列,并删除了一个列。因此,当我尝试从数据库更新模型时,添加了两个新列,而删除的列仍在我的模型中,并且消息:

错误 11009:未映射属性“图像”。

其中Image 是数据库中已删除列的名称。

我可以手动从模型中删除此属性吗?或者还有其他更清洁、更安全的方法吗?

【问题讨论】:

  • 我不认为 Database First 在“从数据库更新”时从概念方案中删除任何内容(即仅从存储方案中删除)。但是我找不到引用。我只见过有人手动从概念方案中删除东西,这确实感觉很奇怪。 This answer sort-of explains how it works. 但在您的情况下,EF 会将已删除的列视为您的概念方案中的自定义项,这是违反直觉的,因为它自动在存储方案和概念方案之间映射。

标签: c# entity-framework sql-server-2008 entity-framework-6 ado.net-entity-data-model


【解决方案1】:

当然,正如其他人所说,改变方法可能是使用 EF 和 DB 的更好方法,但从您需要 Database First 的事实开始,我认为使用 Database First 模型有它的优势,其中之一(并且由此取决于您对第二个问题的答案)是否按原样采用 EDMX,这意味着作为生成的一段代码,您可以在每次需要或想要时刷新、销毁和重新创建它,而不会丢失任何修改。

现在,正如我之前所说,生成代码的性质意味着您对 EDMX 所做的每项更改都将丢失,因此请确保您可以删除一个属性,但模型和数据库并非透明同步。

我认为最好的方法是

  1. 更新数据库结构
  2. 更新 EDMX,如果更新“失败”,即未反映更改,请销毁 EDMX,然后重新创建它

即使这种方法可能是一种简单的方法,也不要首先欺骗数据库的性质。

请注意:首先使用数据库,可以通过使用部分类将内容添加到 DbContext 和所涉及的实体来添加功能和行为来辅助..

【讨论】:

  • 如果从数据库更新模型失败,在图表上选择全部然后删除并从数据库更新模型..为我工作。
  • @PAVITRA,您的评论应该是公认的答案,尽管我只能删除与我的任务相关的特定表,然后在“从数据库更新模型”向导中重新添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-05
  • 2011-07-07
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多