我在使用 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; }
我已经尝试了很多其他的东西。
- 将数据模型直接放在 Web 应用程序中
- 将模型类更改为数据库中的各种其他表,以防 Mno 类出现问题
- 将数据模型简化为一个简单的表
- 使用 Entity Framework Power Tools Beta 2 对 Code First 模型进行逆向工程。这产生了一组新的错误。我明白为什么它是一个测试版。
- 将 ADO.NET 数据模型代码生成策略从 None 更改为 Default 以创建基于 ObjectContext 而不是 DbContext 的数据模型
- 关闭复数,所以属性名称是 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 完成之前继续使用动态数据项目?