9

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

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

我错过了什么......还是这是VS2012的新“功能”?

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

4

4 回答 4

8

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

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

于 2012-10-24T17:17:36.350 回答
2

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

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

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

于 2012-10-25T10:16:01.987 回答
0

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

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

于 2013-09-10T13:01:28.530 回答
0

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

于 2014-12-29T18:09:40.880 回答