生成ScaffoldingConnectionFactory时出错

时间:2011-04-23 14:34:23

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

我有一个叫做申请人的简单课程。我正在尝试使用Entity Framework添加模板控制器,将Applicant作为我的模型类,以及新的数据上下文。

每次我尝试创建控制器时,都会出现一个错误对话框,显示“无法检索'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; }
    }
}

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

11 个答案:

答案 0 :(得分:2)

我有同样的问题,不得不同样修复它。

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

没有修理任何东西。

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

我以为我早点工作了!!

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

有时似乎MS堆栈总是在变化太多而且不可靠。这就是人们使用Linq的原因吗?

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

答案 3 :(得分:1)

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

  1. EFCodeFirst.SqlServerCompact与Entity Framework Feature CTP5一起使用。
  2. EntityFramework.SqlServerCompact与Entity Framework 4.1一起使用。
  3. 如果您使用的是Entity Framework 4.1,则应使用“EntityFramework.SqlServerCompact”。

答案 4 :(得分:1)

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

    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 {
        }
    }

答案 5 :(得分:1)

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

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

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:0)

这些工具是否可以使您的Entity Framework EDMX与您的网站位于同一个程序集中? 我在EDMX处于单独组件的项目中遇到了同样的错误 这是必要的,因为我们需要网站和服务的数据库访问。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

我试图使用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应用程序是新的。