反向工程师代码首先不抓取数据库中的所有视图,聚合导致问题?

时间:2013-01-22 23:30:55

标签: sql-server-2005 entity-framework-4 ef-code-first

我最近向数据库添加了7个视图。当我转到包含该数据库的数据模型的项目并使用逆向工程师代码优先(在EF 4.3.1中)时,不会生成多个视图。

起初我认为存在某种顺序问题,其中一些依赖于其他观点的观点在某种程度上是不正常的,可能会影响整个过程。我重命名了我的视图,以便在SQL Server Management Studio中按照字母顺序显示它们。

这似乎没有帮助。

生成的5个视图确实是需要存在的前5个视图。但是,最后2个视图是未生成的视图。

除了前三个视图之外的所有视图都包含其他视图的连接,所以我不认为连接是一个问题。

但是,看起来两个缺失的视图都包含聚合(SUM和适当的GROUP BY函数),而前5个不包含。

我已经完成了一些搜索,但我没有看到任何关于反向工程师Code First的聚合函数的限制。这个问题有解决方法吗?

更新

我创建了一个新项目,而不是使用我自己的复杂现有数据库,我尝试使用Adventureworks。当我对其进行逆向工程时,具有聚合的视图确实被EF正确建模。

当我查看此视图​​(Sales.vSalesPersonSalesByFiscalYears)时,我注意到所有聚合都是使用pivot完成的。所以我然后重写了我的观点,使用聚合来代替使用枢轴。他们仍然没有进口。

2 个答案:

答案 0 :(得分:1)

逆向工程代码中有一些奇怪的密钥检测逻辑,我还不完全理解。可能只是无法检测到这些视图的实体密钥。

在单独的项目中,使用database-first尝试逆向工程。逆向工程逻辑是相同的,它可以让您更深入地了解无法映射视图的原因。

如果所有其他方法都失败了,您可以随时手动创建映射到这些视图的Code First类。 msdn.com/data/ef网站上有一些关于Code First default conventions的好文章,以及可以使用的data annotations和流畅的API(适用于properties and typesrelationships)将POCO类映射到数据库。

答案 1 :(得分:0)

原因是在视图中,表中没有Identity列的列。如果将表中的键列添加到视图中,则逆向工程将识别它。这对我有用。