Asp.net mvc Visual Studio 2012中数据库第一实体框架模型的MVC4支架
我在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”属性显然已经存在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
public DbSet Mnoes{get;set;}
我试过很多其他的方法
我可以看出,在代码优先和数据库优先模型的构架上,必然会有一些不同。例如,前者具有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; }