【问题标题】:Error generating ScaffoldingConnectionFactory生成 ScaffoldingConnectionFactory 时出错
【发布时间】:2011-04-23 14:34:23
【问题描述】:

我有一个简单的类,叫做申请人。我正在尝试使用实体框架添加模板控制器,申请人作为我的模型类,以及一个新的数据上下文。

每次尝试创建控制器时,我都会收到一个错误对话框,显示“无法检索 'MyNameSpace.Models.Applicant' 的元数据。生成 'ScaffoldingConnectionFactory' 时出错。请尝试重建您的项目。”

重建无济于事。

这是我的模型类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace MyNameSpace.Models
{
    public class Applicant
    {
        public int ApplicantId { get; set; }
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }
        public string MiddleInitial { get; set; }
        [Required]
        public string Phone { get; set; }
        [Required]
        public string EmailAddress { get; set; }
        [Required]
        [DataType(DataType.Date)]
        public string DateOfBirth { get; set; }
        public virtual Ethnicity Ethnicity { get; set; }
        public virtual Race Race { get; set; }
    }

    public class Ethnicity 
    {
        public int EthnicityId { get; set; }
        public string Type { get; set; }
    }
    public class Race 
    {
        public int RaceId { get; set; }
        public string Type { get; set; }
    }
}

我觉得我错过了一步,但我不能把手指放在它上面。

【问题讨论】:

    标签: entity-framework asp.net-mvc-3 ef-code-first


    【解决方案1】:

    我遇到了同样的问题,不得不以类似的方式解决它。

    我的 EF 版本与新的 MVC 工具不兼容。从 NuGet 更新 EntityFramework 并对过时的代码进行一些更新后,一切正常。

    【讨论】:

    • 为完成这项工作做了哪些更新和更改?您能否详细说明以使此答案真正有用?
    【解决方案2】:

    这是一个糟糕的答案,我想了解根本原因,但我的解决方案是从 NuGet 卸载 EntityFramework 库包引用,然后重新安装它。现在一切正常。

    【讨论】:

      【解决方案3】:

      我有同样的问题。尝试使用 NuGet 重新安装 EntityFramework。

      没有解决任何问题。

      我即将保释并尝试使用 Linq。

      我以为我早点有这个工作!

      http://www.asp.net/mvc/tutorials/creating-model-classes-with-linq-to-sql-cs

      有时,MS 堆栈似乎总是变化如此之大,以至于不可靠。这就是人们使用 Linq 的原因吗?

      编辑:在 MS Visual Web Designer 上运行 Web 平台安装程序解决了这个问题。

      【讨论】:

      • 我不确定您的问题是什么,但不要放弃。说出你对 MS 的看法,但那里的人(Scott Gu、Scott Hanselman、Phil Haack)很棒。我保证,如果你能得到他们的耳朵,他们会帮助你或找到可以的人。投票,推特,尽可能多地关注这个问题。
      • 这说明你知道这些人的名字。他们听起来反应灵敏。我使用 Web 平台安装程序来更新 Visual Web Designer(花了一夜的时间),并修复了它。我一步一步从我的 Linux 堆栈中爬出来......
      • 太好了!很高兴你回到游戏中
      【解决方案4】:

      我刚遇到这个问题,然后我意识到我必须选择正确的 NuGet 包来避免这个问题。 NuGet 包列表中有两个非常熟悉的包。

      1. EFCodeFirst.SqlServerCompact 与实体框架功能 CTP5 一起使用。
      2. EntityFramework.SqlServerCompact 与 Entity Framework 4.1 一起使用。

      如果您使用的是 Entity Framework 4.1,则应使用“EntityFramework.SqlServerCompact”!!

      【讨论】:

        【解决方案5】:

        当我尝试使用“添加控制器”对话框创建控制器并选择“具有读/写操作和视图的控制器,使用实体框架”模板选择时,我遇到了这个问题。

        这会为控制器类生成代码。顺便说一句,这包括对 EntityFramework Context 对象的引用(例如,在我的 PersonController 示例中,以下行:“Person person = db.People.Find(id);”)。这只是一个起点,当然,如果您愿意,您可以替换自动生成的代码。无论哪种方式,这就是为什么它会在对话框中要求一个 Context 类,以及为什么它会在需要时为您自动生成一个新的类。

        我使用Nuget引用了Entity Framework,效果相当于引用EntityFramework.dll v4.0。后来我将数据访问代码抽象到另一个项目中,然后通过 Nuget 卸载了 EF。在 Context 类中有一些对 DbSet 的现有引用,我想我必须通过让 Resharper 添加一个引用来解决它,以获取项目只是为了让它编译/构建。 R# 添加了对来自 .Net 4 Framework 库的 System.Data.Entity 的引用。正是在这个阶段,我在尝试使用“具有读/写操作和视图的控制器,使用实体框架”模板创建新控制器时开始收到错误。

        我通过 (1) 删除所有对 System.Data.Entity 的引用来解决它; (2)通过Nuget安装Entity Framework并重建; (3) 创建控制器; (4) 通过 Nuget 卸载 EF,删除自动生成的 Context 类,并用我自己的代码替换控制器中的自动生成的代码,这些代码从我的 DAL 项目/程序集中引用了我的类。

        【讨论】:

        • 补充一点 - 与 Nuget 一起安装的 EntityFramework.dll 版本有一个程序集,它没有引用 EntityState 分子或 context.Entry() 对象的 State 属性(DbEntityEntry 类),所以如果你想更新一个实体的实例是没有用的。毕竟,我最终用最新版本的 System.Data.Entity (v4.0.30319) 替换了 EntityFramework.dll。
        【解决方案6】:

        有同样的问题。问题是上下文在单独的程序集中。

            namespace WebJhs179.Models {
        
                /// <summary>
                /// This class is just wrapper to actual context. Because actual context is in separate assembly, 
                /// MVC3's controller creation fails. 
                /// Workaround: Create empty class and inherit actual context.
                /// </summary>
                public class Jhs179Context : Jhs179.Jhs179DbContext {
                }
            }
        

        【讨论】:

          【解决方案7】:

          我在 ASP.NET MVC 4 中添加新控制器时遇到了同样的问题,我通过将 Database.SetInitializer(new SomeDataContextInitializer()); 从 DBContext 的构造函数移动到 Global.asax.cs 中的 Application_Start 方法解决了这个问题。 希望对您有所帮助。

          【讨论】:

          • 这个小宝石解决了我的问题。我的 DbContext 上有一个静态构造函数,用于设置 Initializer。初始化程序在部署时为数据库播种。但是,在开发过程中,没有人可以添加视图。删除静态构造函数后,添加视图再次起作用。该错误表明连接字符串属性未初始化,并且找不到我的模型的元数据。
          【解决方案8】:

          这些工具会不会期望您的实体框架 EDMX 与您的网站在同一个程序集中?
          我在 EDMX 位于单独程序集中的项目中发生了同样的错误。
          这是必要的,因为我们需要访问网站和服务的数据库。

          【讨论】:

            【解决方案9】:

            我在使用 EF 4.3.1 时遇到了同样的问题。就我而言,这是因为我使用部分类将额外的功能附加到生成的 DbContext 上。当我从模型项目中删除这个类时,脚手架工作正常。

            【讨论】:

              【解决方案10】:

              在我的例子中,.edmx 和模型类在一个单独的程序集中。这不是问题,因为我能够让脚手架正常工作,只需删除我用来扩展生成的 DbContext 类的部分类。

              【讨论】:

                【解决方案11】:

                我尝试使用 MVC 4 和 Entity Framework 6。我终于发现 MVC4 默认引用 EF5 dll,卸载并安装了 EF6。他们我收到了消息:

                MVC Scaffolding does not support Entity Framework 6 or later. For more information please visit: [http://go.microsoft.com/fwlink/?LinkId=276833][1]

                解决方案是改用 MVC 5,因为我已经编写了 EF6 代码,而且 MVC 应用程序是新的。

                【讨论】:

                  猜你喜欢
                  • 2018-03-18
                  • 2017-01-12
                  • 2012-04-04
                  • 2011-05-29
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2018-07-25
                  • 1970-01-01
                  相关资源
                  最近更新 更多