我如何使用asp.net MVC Scaffolder与dbcontext中的两个子类的上下文

时间:2012-04-21 04:19:07

标签: asp.net-mvc-3 inheritance ef-code-first dbcontext asp.net-mvc-scaffolding

我有一套标准模型。

我有一个基础上下文类,它继承自dbcontext以添加我需要的一些功能。

public class MyContext : DbContext
{
    public void MyFeature() {
    }
}

然后我有了实际的数据上下文:

public class DataContext : MyContext
{
    public DbSet<Category> Categories { get; set; }
    public DbSet<Product> Products { get; set; }
}

我想在创建控制器时使用内置的脚手架,但是我收到错误“不支持的上下文类型” 如果我将datacontext更改为直接从dbcontext继承它可以正常工作,但此时我有很多使用添加功能的东西,所以更改继承不能在不注释掉所有内容的情况下完成。我当然简化了功能,它实际上有很多东西,所以直接将它添加到datacontext中会有很多工作,而且脚手架应该足够聪明,看看datacontext是dbcontext。

如何在我的datacontext中使用脚手架?

2 个答案:

答案 0 :(得分:2)

为什么不使用Composition?

如果您的功能确实只是需要,因为我们可以说这些对象需要一些方法,我会将这些方法放在一个名为ContextDetails的单独的类中 - 沿着这些行,并DataContext包含{ {1}}喜欢这样:

ContextDetails

如果//Changed MyContext to ContextDetails public class ContextDetails { public void MyFeature() { //Do something } } public class DataContext : DbContext { public DbSet<Category> Categories { get; set; } public DbSet<Product> Products { get; set; } public ContextDetails DbDetails { get; set; } } 对象需要有关ContextDetails的信息,请将DataContext/DbContext传递给方法甚至构造函数。

如果您不喜欢此问题的合成,可能您想使用接口。如果是这种情况,请查看http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C

  

上下文类必须从System.Data.EntityDbContext继承,它提供查询和处理实体数据作为对象的工具

我能找到为什么继承在你的例子中不起作用的最好的理由。

编辑:

我读了我的答案并意识到DataContext/DbContext可能不是最好的名字,但你明白了。提取实现并将其用作单独的实体。祝你好运!

答案 1 :(得分:0)

我认为首先你应该安装entity framework 4.0然后我认为它确实有效,请试试这个。