我遇到了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; }
我尝试了很多其他的东西。
- 将数据模型直接放在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模型的脚手架中必须存在一些差异。例如,前者具有保存由KeyAttribute指示的密钥的POCO属性,而后者在edmx模型文件中保存该信息。这是Entity Framework Power Tools中反向工程功能的基本原理吗?为了使用MVC4脚手架,我们是否希望从edmx文件转移到逆向工程的Code First模型?如果是这样,我们是否期望在实体框架电动工具完成之前继续使用动态数据项目?