我有一套标准模型。
我有一个基础上下文类,它继承自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中使用脚手架?
答案 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
然后我认为它确实有效,请试试这个。