VS 2012 - EF 5.0 - 从数据库更新模型时未捕获表格更改

9
在Visual Studio 2010 EF 4中,我可以向数据库表中添加新列,然后在我的.edmx上单击“从数据库更新模型”,一切都很好。
在Visual Studio 2012 EF 5中,我修改了一个表,然后单击“从数据库更新模型”,它不再捕获单个表的更改。
我有什么遗漏…或者这是VS2012的新“功能”?
更新:我使表反映在.edmx文件中的唯一方法是删除表,然后“从数据库更新模型”,它会捕获添加的列。但是,它将添加的表放在左侧,我必须将其移回原位。没有大问题,只是有些烦人。

2
这个问题一直很奇怪,即使在2010年和2008年也是如此。某些类型的更改从未传播回模型。也许这就是其中之一? - Erik Funkenbusch
1
我听到你的意见了,但至少在2010年下更新表格是可行的,而且edmx会将其捕捉到。这让我想起了LINQ时代,你必须删除该项然后重新添加... 唉 - c0d3p03t
就像我说的那样,它并不总是这样做。而且你经常需要手动更新对象,或者删除并重新添加。 - Erik Funkenbusch
4个回答

8

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

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


这确实重新构建了类并捕捉到了.edmx文件的更改。但是,如果我更改表格,它仍然没有捕捉到这些更改。请参见此处:截图 - c0d3p03t
新列的表格不会出现在“添加”选项卡下,它们会在“刷新”选项卡下。你的表格在该选项卡下是否列在“刷新”中?在2010和2012年版本中,向现有表格添加新列一直可以正常工作。但是,在2012年版本中,将其放置到一侧是一项新功能 :) - Tobias J

2
有一个EF模型和它在你的数据库中的下划线之间的区别。当你“从数据库更新模型”时,如果实体/表已经被导入到你的数据模型中,那么你将会刷新该实体。这个过程不会自动将你的数据库模式映射到现有的数据模型中,但是你可以向EF模型中的实体添加属性,然后将该属性映射到数据库列(这正是当你正常删除和更新时EF自动为你完成的)。
当你首先删除实体,然后更新时,EF知道该表/实体以前没有被导入过,因此会自动为你映射所有的数据库列。
总之,你不一定要删除实体,但对于简单的实体来说这样做可能更容易些。

我知道,这至少是一种烦恼。我猜这是因为在您添加实体和刷新实体之间,您可能已经对实体进行了其他更改,但这难道不应该只是一个哈希检查比较吗?我相信 ADO.NET 团队有他们的理由。 - Ryan Amies

0

我曾经遇到过类似/相同的问题,我从模型中删除了表格,然后选择“从数据库更新模型”。但这仍然没有起作用,我无法访问我添加到表格中的新列。

然而,一旦我手动从源代码控制(Vault Professional)中检查了模型的设计文件,然后再次从模型中删除了表格并从数据库更新了模型,它就起作用了。所以也许VS不知道在这种特定情况下检查模型的设计文件。


0

这是因为您删除了一个实体,现在想要再次从数据库更新它。模型正在缓存这些实体,这就是为什么您没有选择更新表的选项。所以您需要在模型页面上右键单击并选择“模型浏览器”选项。您将在右侧找到模型浏览器,在实体类型文件夹中删除要更新的实体。现在您可以随心所欲地进行操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接