【问题标题】:Can't create MVC4 controller for classes with a base class (Generated from Entity Framework)无法为具有基类的类创建 MVC4 控制器(从实体框架生成)
【发布时间】:2013-08-30 09:23:25
【问题描述】:

我正在使用 Entity Framework 5 和 MVC4 来使用 Model First 创建一个小型测试应用程序。

我有两个项目,一个data 项目和一个引用数据的ui 项目。

我在data 中有我的模型MYModel.edmx,它具有以下实体

[ITEM] [BOOK][DVD] 其中“book”和“dvd”具有抽象类“Item”的基类型。

使用代码生成,它为这 3 个表和我的 dbContext 创建类:

public DbSet<Item> Items {get;set;}

不创建任何用于访问“书籍”或“DVD”的 DbSet。

如果我尝试使用我的数据上下文和“书籍”模型类创建一个新控制器,我会收到以下错误

mynamespace.data.books is not part of the specified mynamespace.data.dbcontext class, and the mynamespace.data.dbcontext class could not be modified to add a dbset<mynamespace.data.books> property to it. (For example )

首先将 EF 与基本类型和模型一起使用的正确方法是什么,因为我显然做错了什么,我什至应该先使用 Model 吗?在这种情况下使用 Code first 并自己创建 DBContext 会更容易吗?

【问题讨论】:

  • 您是否正在创建模型并通过 edmx 生成实体?它应该是其中之一。
  • @ChrisHardie 全部由 EDMX 生成
  • 您的抽象类是由 EDMX 生成的吗?
  • @ChrisHardie 是的,在我的“项目”实体的属性窗口中,我已将其设置为 Abstract = true。它从 EDMX 生成一个public abstract partial class Item(在 .tt 代码生成项中)
  • 听起来您正在实现 Table-Per-Hierarchy 继承。如果您查看您的实际数据库结构,将只有一个 Item 表,但它将包含 Books 和 DVD 的字段。我不熟悉模型优先,但你应该检查一下:asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/…

标签: asp.net-mvc entity-framework


【解决方案1】:

我对模型优先不是很熟悉,但请尝试将其添加到您的 mynamespace.data 命名空间中:

public class DVD : Item{
    //Put your DVD specific properties here
}

public class Book : Item{
     //Put your Book specific properties here
}

这里不要添加主键,它们都将继承 ItemId 主键,因为在数据库中 DVD 和 Book 都存储在 Item 表中。

然后,将这两个模型添加到您的上下文中:

public DbSet<DVD> DVDs {get;set;}
public DbSet<Book> Books {get;set;}

可以在这里找到通过代码优先实现 Table-Per-Hierarchy 的一个很好的参考,很抱歉我不知道任何模型优先参考:http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

【讨论】:

  • 谢谢,这帮助很大。我最终删除了我的 EDMX 并转而使用代码优先,因为它似乎工作得更好。 EDMX 生成的代码并不出色!
【解决方案2】:

我遇到了同样的问题,但我不知道是什么原因造成的。您需要做的就是:

  1. 编译项目
  2. 右键单击您的 Controllers 文件夹以添加您的控制器
  3. 在数据上下文类的添加控制器对话框中,手动键入您的上下文,然后单击添加

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    相关资源
    最近更新 更多