11

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

“Ifl.Payforit4.DatabaseModel.Mno”不属于指定的“Ifl.Payforit4.DatabaseModel.Payforit4Entities”类,并且无法修改“Ifl.Payforit4.DatabaseModel.Payforit4Entities”类以将“DbSet”属性添加到它。(例如,“Ifl.Payforit4.DatabaseModel.Payforit4Entities”类可能在已编译的程序集中。)

无法修改该类是有道理的,因为它在另一个程序集中,尽管在相同的解决方案中,并且通过 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 模型的脚手架必须存在一些差异。例如,前者的 POCO 属性保存由 KeyAttribute 指示的键,而后者在 edmx 模型文件中保存该信息。这是 Entity Framework Power Tools 中逆向工程功能的基本原理吗?我们是否期望从 edmx 文件转向逆向工程 Code First 模型以使用 MVC4 脚手架?如果是这样,我们是否希望在 Entity Framework Power Tools 完成之前继续使用动态数据项目?

4

4 回答 4

13

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

请参阅此处:ASP.NET MVC4 – 如何在 MVC 控制器中使用 Database First EF

于 2013-03-20T19:50:35.177 回答
0

我不认为我们可以使用 Entity Framework 5 从 edmx 文件构建脚手架。

我尝试了一系列类似的事情,但仍然遇到错误。

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

我将尝试更多以使其正常工作,因为我更喜欢 DB 优先方法。如果我得到任何进一步的信息,我会更新这个答案。

于 2012-12-14T14:45:22.530 回答
0

Entity Frameork 5/VS 2012 中的 edmx 代码生成器有问题。它创建的代码充满了编译器错误。我猜当 vs2012 发布时它还没有准备好发货,这就是他们将默认代码生成标志设置为无的原因。

微软唯一的问题是:我们什么时候可以期待修复这个问题的更新?

于 2013-01-05T06:33:15.513 回答
-2

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

谢谢!!马库斯!

于 2014-07-22T00:11:18.727 回答