4

努力为数据库创建实体框架预编译视图并需要帮助。

在使用 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 模板创建的其他视图文件一样工作。

我一直在听这件事,反正我所剩无几,所以我真的可以使用一些好的建议。我需要一个解决方案,我看到了以下三种方法之一:

  1. 选择基于 DbContext 的对象文件时,使用 Entity Framework Power Tools Beta 3 和“创建视图”上下文菜单选项。

  2. 使用 T4 模板,在构建视图时微笑并忍受超时问题和不断的失败。

  3. 使用带有 EDMX 文件的模型项目并使用 Power Tools Beta 3“创建视图”上下文菜单并解决命名空间或视图发现问题。

请帮我找出这三种方法中的一种并让它发挥作用。

谢谢,布莱克

4

3 回答 3

2

好的 - 我在尝试从电动工具菜单查看查看实体模型时遇到了这个问题。序列不包含任何元素。看起来工具 Beta 3 仍在建设中。原因显然是电动工具找不到连接字符串。无论如何,这是一个有效的临时解决方案。

将新的类库项目添加到您的解决方案。如果需要,您可以删除默认的 class1。现在,添加一个带有连接字符串元素的 App.config 文件。(我只是从真实的 App.config 中复制了我的。然后,将此项目设置为 Startup 项目。现在,当您单击View Entity Model as readonly菜单项时,它将显示。

我猜这些家伙正在研究这个问题。Julie Lerman 在上面提到的链接中写了一篇关于它的博客。

希望这能解决您的一些问题。

于 2013-07-21T15:24:24.093 回答
1

你检查过你的连接字符串吗?

这篇文章应该有助于解释您的问题: http ://thedatafarm.com/blog/data-access/entity-framework-power-tool-tips-to-view-model-a-feature-i-depend-on

于 2013-07-19T20:45:22.623 回答
0

有同样的问题,但不同的原因。上下文:EF 与 Oracle 数据库一起使用

其中一列被映射到 CLOB 列类型,EF Power Tolls 不喜欢这种类型,尽管在使用数据库时 EF 能够使用它没有问题。

Property(l => l.MyField).HasColumnName("MY_FIELD").HasColumnType("CLOB");
于 2017-01-05T16:38:52.333 回答