Asp.net mvc Visual Studio 2012中数据库第一实体框架模型的MVC4支架

Asp.net mvc Visual Studio 2012中数据库第一实体框架模型的MVC4支架,asp.net-mvc,entity-framework,visual-studio-2012,scaffolding,Asp.net Mvc,Entity Framework,Visual Studio 2012,Scaffolding,我在Visual Studio 2012中遇到问题,试图添加带有脚手架的MVC4控制器。理想情况下,我希望在web应用程序的单独程序集中使用Add New Item-ADO.NET Entity Data model(即非代码优先)从数据库生成实体框架模型(edmx文件等)。但是,当我设置并使用Add Controller时,指定“具有读/写操作和视图的MVC控制器,使用实体框架”,并从我的DatabaseModel程序集中选择模型类和数据上下文类,会弹出以下警报消息 “Ifl.Payforit

我在Visual Studio 2012中遇到问题,试图添加带有脚手架的MVC4控制器。理想情况下,我希望在web应用程序的单独程序集中使用Add New Item-ADO.NET Entity Data model(即非代码优先)从数据库生成实体框架模型(edmx文件等)。但是,当我设置并使用Add Controller时,指定“具有读/写操作和视图的MVC控制器,使用实体框架”,并从我的DatabaseModel程序集中选择模型类和数据上下文类,会弹出以下警报消息

“Ifl.Payforit4.DatabaseModel.Mno”不是指定的 'Ifl.Payforit4.DatabaseModel.Payforit4Entities'类,以及 无法创建“Ifl.Payforit4.DatabaseModel.Payforit4Entities”类 修改为将“DbSet”属性添加到 信息技术(例如,“Ifl.Payforit4.DatabaseModel.Payforit4Entities” 类可能位于已编译的程序集中。)

无法修改该类是有意义的,因为它位于另一个程序集中(尽管在同一个解决方案中),并且通过T4自动生成,但查看PayForit4实体的自动生成代码,“DbSet”属性显然已经存在

public DbSet Mnoes{get;set;}
我试过很多其他的方法

  • 将数据模型直接放入web应用程序
  • 将模型类更改为数据库中的各种其他表,以防Mno类出现问题
  • 将数据模型简化为一个简单的表
  • 使用实体框架Power Tools Beta 2对代码优先模型进行逆向工程。这产生了一组新的错误。我明白为什么它是测试版了
  • 将ADO.NET数据模型代码生成策略从“无”更改为“默认”,以基于ObjectContext而不是DbContext创建数据模型
  • 关闭多元化,使属性名称为Mno而不是Mnoes
  • 他们都没有工作。唯一有效的方法是手工编写代码优先的DbContext派生类和POCO。巧合的是,我发现的每个演示MVC4脚手架的示例都使用这种数据模型。有没有什么地方说代码优先是唯一一种使用MVC4脚手架的数据模型?是否有人在Visual Studio 2012中成功构建了数据库优先(.edmx)数据模型?数据库非常复杂,我宁愿坚持数据库优先的策略


    我可以看出,在代码优先和数据库优先模型的构架上,必然会有一些不同。例如,前者具有POCO属性,该属性保存由KeyAttribute指示的密钥,而后者在edmx模型文件中保存该信息。这是实体框架电动工具中逆向工程功能的基本原理吗?为了使用MVC4脚手架,我们是否希望从edmx文件转移到反向工程的代码优先模型?如果是这样,我们是否希望继续使用动态数据项目,直到Entity Framework Power Tools完成?

    我认为我们无法使用Entity Framework 5从edmx文件中构建框架

    我也尝试过类似的方法,但仍然会出错

    有一些建议认为,删除一个坏的edmx并重新启动可能会生成正确的.tt文件,以允许脚手架正常工作,但我还没有看到这一点


    我将尝试更多的方法来让它工作,因为我更喜欢DB优先的方法。如果我得到更多信息,我会更新这个答案。

    Entity Framework 5/VS 2012中的edmx代码生成器有缺陷。它会创建充满编译器错误的代码。我猜它在vs2012发布时还没有准备好发布,这就是为什么他们将默认代码生成标志设置为“无”


    对于Microsoft来说,唯一的问题是:我们什么时候可以期望更新来修复此问题?

    诀窍是首先编译您的解决方案,然后手动键入上下文类。不要从下拉列表中选择它,只要自己输入类名,它就会神奇地工作;-)

    请看这里:

    这是事实! 诀窍是首先编译解决方案,然后手动键入上下文类。不要从下拉列表中选择它,只要自己输入类名,它就会神奇地工作;-)


    谢谢!!马库斯

    你已经找到解决办法了吗?我也更喜欢db first方法不,我还没有找到任何有用的解决方案。正如alexb在下面所说的,它不是很健壮,所以希望它在未来会变得更好update@zoidbergi:和你一样,我在使用EF5DB的mvc4项目中遇到了很多问题。我在VS2013预览版上进行了测试:相同的项目,相同的代码现在运行良好。因此,我暂时在虚拟机上工作,以安全使用VS2013,并能够在必要时切换回VS2012。这非常有效,并支持StackOverflow在我键入问题时为我提供此链接。当我尝试此操作时,我得到“模型类型无效。请从列表中选择一项”。这很有效,谢谢。注意它工作的原因是它在项目的根目录中创建了一个新的DbContext类。它解决了我遇到的问题,但是它在根目录中创建了一个DbContext。没什么大不了的,你可以把它删除并设置为使用正确的答案。请不要复制和粘贴答案来表达你的感激之情。
        public DbSet<Mno> Mnoes { get; set; }