2011-04-23 56 views
2

我有一个简单的类叫做申请人。我试图添加一个模板控制器,使用Entity Framework作为我的模型类和一个新的数据上下文。生成脚手架连接工厂时出错

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

我觉得我已经错过了一步,但我不能把我的手指上。

回答

2

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

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

+1

为了完成这项工作,做了哪些更新和更改?你能否详细说明这个答案实际上有用? – renegadeMind 2012-05-11 17:37:42

1

这是一个可怕的答案,我想了解的根本原因,但我的解决办法是卸载从的NuGet中的EntityFramework库包的参考,然后再重新安装。现在一切正常。

1

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

没有解决任何问题。

我要保释,并尝试使用LINQ。

我以为我早些工作了!

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

有时它似乎像MS栈总是在变化了这么多是不可靠的。这就是为什么人们使用Linq?

编辑:运行在固定的这个问题MS Visual Web设计web平台安装。

+0

我不确定你的问题是什么,但不要放弃。说出你对MS的看法,但那里的球员(Scott Gu,Scott Hanselman,Phil Haack)真棒。我保证,如果你能得到他们的耳朵,他们会帮助你或找到可以的人。投票,发送它,无论你能更多地关注这个问题。 – 2011-05-03 21:19:11

+0

这说的很多,你知道这些人的名字。他们响应良好。我使用网络平台安装程序来更新可视网页设计器(它过了一夜),并修复了它。我一次只能从我的Linux堆栈中爬出来...... – micahhoover 2011-05-04 05:57:52

+0

太棒了!在游戏中高兴地回来 – 2011-05-04 14:57:01

0

它可以是工具期待你的实体框架EDMX是在相同的组件,您的网站?
我在EDMX在一个单独的程序集中的项目中遇到了同样的错误。
这是无用的,因为我们需要数据库访问网站以及服务。

1

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

  1. 的EFCodeFirst.SqlServerCompact用于与实体框架特性CTP5。
  2. EntityFramework.SqlServerCompact与实体框架4.1一起使用。

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

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

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

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

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

我分辨它由(1)除去对System.Data.Entity所有引用; (2)通过Nuget安装Entity Framework并重建; (3)创建控制器; (4)通过的NuGet卸载EF,去除所述自动生成的上下文类和更换在用自己的控制器所引用从我DAL项目/组件我的类自动生成的代码。

+0

要添加到此 - 与Nuget一起安装的EntityFramework.dll的版本有一个程序集,它没有引用EntityState分子或context.Entry()对象(DbEntityEntry类)的State属性,因此如果您想要更新实体的实例。毕竟,我最终用最新版本的System.Data.Entity(v4.0.30319)取代了EntityFramework.dll。 – 2011-12-01 17:33:17

1

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

+0

这个小宝石修复了我的问题。我在设置初始化程序的DbContext上有一个静态构造函数。初始化程序在部署中植入数据库。但是,回到开发阶段,没有人可以添加观点。删除静态构造函数后,添加视图再次工作。该错误指出连接字符串属性未初始化,并且无法找到我的模型的元数据。 – 2014-01-01 23:57:55

0

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

0

在我的情况下的.edmx和模型类是在一个单独的组件。这不是问题,因为我能够正确地使脚手架正常工作,只需删除我用来扩展生成的DbContext类的部分类。

0

我尝试使用MVC 4和Entity Framework 6.我终于想通了,MVC4引用默认情况下,卸载和安装EF6的EF5 DLL。他们我得到的消息:

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