努力为数据库创建实体框架预编译视图并需要帮助。
在使用 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 模板创建的其他视图文件一样工作。
我一直在听这件事,反正我所剩无几,所以我真的可以使用一些好的建议。我需要一个解决方案,我看到了以下三种方法之一:
选择基于 DbContext 的对象文件时,使用 Entity Framework Power Tools Beta 3 和“创建视图”上下文菜单选项。
使用 T4 模板,在构建视图时微笑并忍受超时问题和不断的失败。
使用带有 EDMX 文件的模型项目并使用 Power Tools Beta 3“创建视图”上下文菜单并解决命名空间或视图发现问题。
请帮我找出这三种方法中的一种并让它发挥作用。
谢谢,布莱克