SQL Server 2005 - 逆向工程代码 首先不抓取数据库中的所有视图,聚合会导致问题



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

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

这似乎没有帮助。

生成的 5 个视图

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

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

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

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

更新

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

当我查看此视图(Sales.vSalesPersonSalesByFiscalYears)时,我注意到所有聚合都是使用透视完成的。因此,我随后重写了使用聚合来改用透视的视图。 它们仍然没有被导入。

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

在单独的项目中,尝试使用数据库优先进行逆向工程。逆向工程逻辑是相同的,它可能会让您更深入地了解无法映射视图的原因。

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

原因是在

视图中,表中没有标识列的列。如果将表中的键列添加到视图中,则逆向工程将识别该键列。这对我有用。

最新更新