问题 Visual Studio 2012中数据库优先实体框架模型的MVC4脚手架


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

'ifl.Payforit4.DatabaseModel.Mno'不是指定的一部分   'ifl.Payforit4.DatabaseModel.Payforit4Entities'类,和   'ifl.Payforit4.DatabaseModel.Payforit4Entities'类不可能   修改为添加'DbSet'属性   它。 (例如,'Ifl.Payforit4.DatabaseModel.Payforit4Entities'   class可能在已编译的程序集中。)

无法修改类是有意义的,因为它在另一个程序集中,虽然在同一个解决方案中,并且通过T4自动生成但是查看Payforit4Entities的自动生成代码,'DbSet'属性已经非常明显。

    public DbSet<Mno> Mnoes { get; set; }

我尝试了很多其他的东西。

  1. 将数据模型直接放在Web应用程序中
  2. 在Mno类出现问题的情况下,将模型类更改为数据库中的各种其他表
  3. 将数据模型简化为一个简单的表
  4. 使用Entity Framework Power Tools Beta 2对Code First模型进行反向工程。这产生了一组新的错误。我明白为什么它是测试版。
  5. 将ADO.NET数据模型代码生成策略从None更改为Default以基于ObjectContext而不是DbContext创建数据模型
  6. 关闭复数,使属性名称为Mno而不是Mnoes

他们都没有工作。唯一有效的方法是手工编写Code First DbContext派生类和POCO。巧合的是,我发现的每个例子都演示了MVC4脚手架使用这种数据模型。有没有什么东西说Code First是唯一适用于MVC4脚手架的数据模型?有没有人设法在Visual Studio 2012中构建数据库优先(.edmx)数据模型?数据库非常复杂,我宁愿坚持使用数据库优先策略。

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


10232
2017-09-25 03:02


起源



答案:


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

看这里: ASP.NET MVC4-如何在MVC控制器中使用Database First EF


13
2018-03-20 19:50



这非常有效,并支持StackOverflow,因为我在输入问题时给了我这个链接。 - done_merson
同样在这里,不敢相信这是多么迟钝的哈哈。 - Dave
当我尝试这个时,我得到“模型类型无效。请从列表中选择一个项目。” - JasonRed
工作就像魅力谢谢你:D - Chlebta
这有效,谢谢。请注意它的工作原理是它在项目的根目录中创建一个新的DbContext类。 - Matt


答案:


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

看这里: ASP.NET MVC4-如何在MVC控制器中使用Database First EF


13
2018-03-20 19:50



这非常有效,并支持StackOverflow,因为我在输入问题时给了我这个链接。 - done_merson
同样在这里,不敢相信这是多么迟钝的哈哈。 - Dave
当我尝试这个时,我得到“模型类型无效。请从列表中选择一个项目。” - JasonRed
工作就像魅力谢谢你:D - Chlebta
这有效,谢谢。请注意它的工作原理是它在项目的根目录中创建一个新的DbContext类。 - Matt


我认为我们不能使用Entity Framework 5从edmx文件中构建支架。

我尝试过类似的东西,但仍然遇到错误。

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

我将尝试更多工作,因为我更喜欢DB第一种方法。如果我再进一步,我会更新这个答案。


0
2017-12-14 14:45



你找到了解决方案吗?我也更喜欢db第一种方法 - daniel
不,我没有找到任何有用的解决方案。正如alexb在下面所说,它不是很强大,所以希望它在更新中会变得更好 - James Osborn
@zoidbergi:和你一样,我在使用EF5 db的mvc4项目上有很多关于脚手架的问题。我测试了VS2013预览:同一个项目,相同的代码现在工作正常。所以我暂时在虚拟机上安装VS2013并在必要时切换回VS2012。 - JYL


实体Frameork 5 / VS 2012中的edmx代码生成器是错误的。它创建了充满编译器错误的代码。我猜测它在vs2012发布时尚未准备好发货,这就是为什么他们将默认代码生成标志设置为none。

对微软来说,唯一的问题是:我们什么时候可以期待更新来解决这个问题?


0
2018-01-05 06:33





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

谢谢!!马库斯!


-1
2017-07-22 00:11



请不要复制并粘贴答案以表达您的意见。 - Jens Wirth