“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 模型。这产生了一组新的错误。我可以理解它为什么是 beta 版。 5. 将 ADO.NET 数据模型代码生成策略从“无”更改为“默认”,以创建基于 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 反向工程功能的原理吗?我们是否应该从 edmx 文件转移到反向工程的 Code First 模型以使用 MVC4 脚手架?如果是这样,我们是否应该继续使用动态数据项目,直到 Entity Framework Power Tools 完成?