【问题标题】:VS 2012 - EF 5.0 - Update Model from Database - Not picking up table changesVS 2012 - EF 5.0 - 从数据库更新模型 - 不获取表更改
【发布时间】:2012-10-14 18:54:49
【问题描述】:

在 Visual Studio 2010 EF 4 中,我可以在数据库表中添加一个新列,然后在我的 .edmx 上单击“从数据库更新模型”,一切都很好。

在 Visual Studio 2012 EF 5 中,我更改了一个表,然后单击“从数据库更新模型”,它不再获取对单个表的更改。

我是否遗漏了什么……或者这是 VS2012 的新“功能”?

更新 我可以获得带有添加列以反映在 .EDMX 文件中的表的唯一方法是删除该表,然后“从数据库更新模型”,它将获取添加的列。然而,它把添加的桌子放在离左边很远的地方,我必须把它移回原位。没有biggie只是一个烦恼。

【问题讨论】:

  • 这一直很古怪,即使在 2010 年和 2008 年也是如此。某些类型的更改从未传播回模型。也许这就是其中之一?
  • 我听到了,但至少在 2010 年更新表格时它可以工作,并且 edmx 会接收它。这让我回到了 LINQ 时代,您必须删除该项目,然后将其重新添加......呃
  • 就像我说的,它并不总是这样。而且您经常不得不手动更新对象,或者删除并重新添加。

标签: entity-framework visual-studio-2012


【解决方案1】:

这是发生的,因为您删除了一个实体,现在想再次从数据库中更新它。模型正在缓存这个实体,这就是为什么您没有选择更新表的原因。所以您必须右键单击模型页面并选择模型浏览器选项。您将在右侧找到模型浏览器。从实体类型文件夹中删除您要更新的实体。现在做任何您想做的事情。

【讨论】:

    【解决方案2】:

    我遇到了类似/相同的问题,我从模型中删除了表,然后选择了“从数据库更新模型”。这再次不起作用,我无法访问我添加到表中的新列。

    但是,一旦我从源代码控制 (Vault Professional) 中手动检出模型的设计器文件,然后从模型中删除表并再次从数据库中更新模型,它就可以工作了。所以也许 VS 不知道在这个特定的实例中检查模型的设计器文件。

    【讨论】:

      【解决方案3】:

      拥有 EF 模型和它在数据库中的下划线方式是有区别的。当您“从数据库更新模型”时,如果实体/表已经导入到您的数据模型中,那么您将刷新实体。此过程不会自动将您的数据库架构映射到现有数据模型,但是您可以向 EF 模型中的实体添加一个属性,然后将该属性映射到数据库列(这正是 EF 在您自动为您所做的正常删除更新)。

      当您先删除实体时,更新 EF 会知道该表/实体之前尚未导入,因此会自动为您映射所有数据库列。

      总而言之,您不必删除实体,但对于简单实体,这样做会更容易。

      【讨论】:

      • 我知道,至少可以这么说,这很烦人。我想这是因为您可以在添加实体和刷新实体之间对实体进行其他更改,但这不应该只是哈希检查比较吗?我相信 ADO.NET 团队有他们的理由。
      【解决方案4】:

      是的,这在 VS2012 中仍然有效。您是使用默认代码生成还是有 TT 文件?可能是它正在添加到 EDMX,但您的类文件没有更新。

      尝试在解决方案资源管理器中右键单击 EDMX 文件或相关的 TT 文件,然后选择“运行自定义工具”以确保它正在重新生成。

      【讨论】:

      • 这确实重建了类并获取了对 .edmx 文件的更改。但是,如果我改变一张桌子,它仍然不会接受这些改变。见这里:screenshot
      • 带有新列的表格不会显示在“添加”选项卡下;他们将在“刷新”选项卡上。您的表格是否列在该选项卡的“刷新”下?在 2010 年和 2012 年期间,向现有表添加新列总是对我有用。但是,将它放在一边是 2012 年的一项新功能:)
      猜你喜欢
      • 2015-11-03
      • 2018-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 2021-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多