【发布时间】:2017-01-06 00:38:52
【问题描述】:
正在努力为数据库创建 Entity Framework 预编译视图并需要帮助。
在使用 Visual Studio 2010 时,我无法使用最新版本的 Entity Framework Power Tools Beta 3 生成预编译视图。当我右键单击基于 dbContext 的文件并选择“生成视图”选项时,它会弹出“序列不包含匹配元素”对话框错误框。
卸载电动工具扩展,重新启动 Visual Studio 和计算机没有帮助。
问题 1:可能导致此错误的原因。 Entity Framework Power Tools 在我让它工作之前一文不值?
所以到目前为止,我能够为此序列生成视图的唯一方法是使用 T4 模板(来自 Internet),但它经常超时并且无法完成。该数据库有大约 350 个表,它创建的视图数量约为 670 个视图。但是,它在大多数情况下都无法创建视图,我必须反复尝试,有时还要关闭并重新启动才能使其正常工作。这段时间的 CPU 使用率在 i7 Quad core 和 SSD 和 8GB 内存上大约是 12%,所以这很奇怪。但是,当视图生成时(没有超时),它们可以正常工作。
问题 2:有什么办法可以防止此模板超时和失败?
现在不能放弃我已经考虑尝试其他方法,我能够通过创建数据库优先项目并添加从现有数据库创建的实体框架数据模型来生成视图。模型创建得很好,我能够按预期创建视图,但是当放置在最终程序集中并且实体尝试查询数据库时它们无法识别。放置在程序集中时,我将使用 T4 模板生成的视图文件替换为由 Power Tools 上下文菜单创建的文件。
命名空间是否会导致此问题?
我认为它与命名空间有关,但我不知道它如何找出已编译视图的规则,以及命名空间和视图必须调用什么才能被发现和使用。从 DbContext 文件创建的视图与使用同一数据库的 Edmx 模型创建的视图位于不同的项目中。我有一个 DbContext 项目、一个模型项目、一个域类项目和域类映射项目。我将视图文件放在与域类相同的程序集(项目)中。
这是生成的视图输出的示例。左侧是使用 T4 模板和“运行自定义工具”创建的,右侧是使用 Entity Framework Power Tools Beta 3 创建的,并在 EDMX 文件上光标时从上下文菜单中选择“创建视图”。
工作一:
SELECT VALUE [xxx.yyy.Provider.DataContext.RouteStop](T1.RouteStop_RouteStopId, ...
FROM (
SELECT T1.RouteStopId as RouteStop_RouteStopId, .....
FROM CodeFirstDatabase.RouteStop AS T
) AS T1
不工作的一个:
SELECT Value [xxx.yyy.Provider.DataModel.Store.RouteStop](T1.RouteStop_RouteStopId, ...
FROM (
SELECT T1.RouteStopId as RouteStop_RouteStopId, .....
FROM ZeeZorProviderEdmx.RouteStops AS T
) AS T1
项目的命名空间包含域类,还包含生成的视图的副本,如果有帮助的话,它是“xxx.yyy.Provider.DomainClasses”。
问题 3:如何让 Power Tools 从 EDMX 生成的视图像从 T4 模板创建的其他视图文件一样工作。
我一直在听这件事,反正我也没有多少东西了,所以我真的可以使用一些好的建议。我需要一个解决方案,我看到了以下三种方法之一:
使用 Entity Framework Power Tools Beta 3 和“创建视图” 选择基于 DbContext 的对象文件时的上下文菜单选项。
使用 T4 模板,只需微笑并忍受超时问题和 构建视图时不断失败。
使用带有 EDMX 文件的模型项目并使用 Power Tools Beta 3 “创建视图”上下文菜单并解决命名空间或视图 发现问题。
请帮我找出这三种方法中的一种并让它发挥作用。
谢谢, 布莱克
【问题讨论】:
-
在处理另一个项目时遇到类似问题后得到了另一个可能的解决方案。使用 ODP.NET 托管驱动程序连接到 Oracle 时,我的项目中没有对包含上下文和“创建预编译视图”的 Oracle DLL (Oracle.ManagedDataAccess.dll) 的引用一直说“序列不包含任何元素”。我添加了参考,问题就消失了,可以编译视图。看来,您不仅必须确保连接字符串正确,而且还必须在 app.config 中引用正确的“providerName”。
标签: entity-framework