实体框架Power Tools Beta 3在尝试生成视图时抛出异常“序列不包含匹配元素”

时间:2013-07-19 18:06:47

标签: entity-framework

努力为数据库创建Entity Framework预编译视图并需要帮助。

使用Visual Studio 2010时,我无法使用最新版本的Entity Framework Power Tools Beta 3生成预编译视图。当我右键单击基于dbContext的文件并选择“生成视图”选项时,它会弹出“序列不包含匹配元素”对话框错误框。

卸载电动工具扩展,重启Visual Studio和计算机没有帮助。

问题1:可能导致此错误的原因。实体框架Power Tools在我能够运行之前是没有价值的吗?

到目前为止,我能够为此序列生成视图的唯一方法是使用T4模板(来自Internet),但它经常超时且无法完成。该数据库有大约350个表,它创建的视图数约为670个视图。但是,它无法在大多数时间创建视图,我不得不反复尝试,有时会关闭并重新启动以使其工作。在具有SSD和8GB内存的i7 Quad内核上,此时的CPU利用率约为12%,因此很奇怪。但是,当生成视图(没有超时)时,它们可以正常工作。

问题2:是否有任何措施可以防止此模板超时失败?

现在无法放弃我已经考虑过尝试其他方式,我能够通过创建数据库第一个项目并添加从现有数据库创建的实体框架数据模型来生成视图。模型创建得很好,我能够按预期创建视图,但是当放在最终的程序集中并且实体尝试查询数据库时,它们不会被识别。放入程序集时,我替换了使用T4模板生成的视图文件,该文件由Power Tools上下文菜单创建。

命名空间是否会导致此问题?

我认为它与命名空间有关,但我不知道它如何找出编译视图的规则以及为了找到和使用而必须调用命名空间和视图的内容。从DbContext文件创建的视图与使用同一数据库的Edmx模型创建的视图位于不同的项目中。我有一个DbContext项目,一个Model Project,一个Domain Classes项目和Domain Class Mapping项目。我将视图文件放在与域类相同的程序集(项目)中。

以下是生成的视图输出的示例。左边的那个是使用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

包含Domain类的项目的名称空间,如果有帮助,还包含生成的视图的副本“xxx.yyy.Provider.DomainClasses”。

问题3:如何从EDMX获取Power Tools生成的视图,就像从T4模板创建的其他视图文件一样。

我一直在失去对此的聆听,我也没有多少离开,所以我真的可以使用一些好的建议。我需要一个解决方案,我会看到以下三种方式之一:

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

  2. 使用T4模板,只是笑着承受超时问题 构建视图时不断失败。

  3. 将Model项目与EDMX文件一起使用并使用Power Tools Beta 3 “创建视图”上下文菜单并解决命名空间或视图 发现问题。

  4. 请帮我弄清楚这三种方法中的一种,让它发挥作用。

    谢谢, 布雷克

3 个答案:

答案 0 :(得分:2)

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

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

我猜这些人正在研究这个问题。 Julie Lerman在上面提到的链接中发表了关于它的博文。

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

答案 1 :(得分:1)

您是否检查了连接字符串?

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

答案 2 :(得分:0)

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

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

Property(l => l.MyField).HasColumnName("MY_FIELD").HasColumnType("CLOB");