3

我有一套标准模型。

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

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

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

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

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

如何将脚手架与我的数据上下文一起使用?

4

2 回答 2

2

为什么不使用合成?

如果您的功能确实只是需要,比如这些对象中需要的一些方法,我会将这些方法放在一个名为的单独类中ContextDetails- 类似这些内容并DataContext包含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它的信息,则将其传递DataContext/DbContext给方法甚至构造函数。

如果你不喜欢这个问题的组合,也许你想使用一个接口。如果是这种情况,请查看http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C

上下文类必须从 System.Data.EntityDbContext 继承,后者提供了查询和使用实体数据作为对象的工具

我能找到的最佳原因是为什么继承在您的示例中不起作用。

编辑:

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

于 2012-09-20T10:27:37.440 回答
0

我认为首先你应该安装entity framework 4.0 然后我认为它肯定可以工作请试试这个。

于 2012-09-26T10:40:06.937 回答