1

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

起初,我认为存在某种顺序问题,其中一些依赖于其他视图的视图以某种方式出现故障,可能会影响流程。我重命名了我的视图,以便在 SQL Server Management Studio 中它们按字母顺序出现,以便它们需要。

这似乎没有帮助。

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

除前 3 个视图外,所有视图都包含其他视图的连接,因此我认为连接不会成为问题。

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

我已经进行了一些搜索,但我没有看到任何地方对逆向工程师代码优先的聚合函数有限制。这个问题有解决方法吗?

更新

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

当我查看此视图​​ (Sales.vSalesPersonSalesByFiscalYears) 时,我注意到所有聚合都是使用数据透视完成的。因此,我随后重写了使用聚合来使用枢轴的视图。他们仍然没有被进口。

4

2 回答 2

1

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

在一个单独的项目中,尝试使用database-first进行逆向工程。逆向工程的逻辑是相同的,它可能会让您更深入地了解为什么无法映射视图。

如果一切都失败了,您始终可以手动创建映射到这些视图的 Code First 类。msdn.com/data/ef站点有一些关于 Code First 的默认约定的好文章,以及可用于将 POCO 类映射到数据库的数据注释和流式 API(用于属性和类型关系)。

于 2013-01-22T23:57:15.267 回答
0

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

于 2013-08-07T00:30:50.980 回答