asp.net-mvc-3 - 如何将 asp.net MVC 脚手架与从 dbcontext 向下两个子类的上下文一起使用

标签 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; }
}

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

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

最佳答案

为什么不使用 Composition?

如果您的功能确实是刚好需要的,比如说那些对象中需要的一些方法,我会将这些方法放在一个名为 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 传递到方法甚至构造函数中.

如果您不喜欢 Composition 来解决这个问题,您可能想使用 Interface。如果是这种情况,请查看 http://www.codeproject.com/Tips/309753/Repository-Pattern-with-Entity-Framework-4-1-and-C

The context class must inherit from System.Data.EntityDbContext which provides facilities for querying and working with entity data as objects

我能找到的关于继承在您的示例中不起作用的最佳原因。

编辑:

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

关于asp.net-mvc-3 - 如何将 asp.net MVC 脚手架与从 dbcontext 向下两个子类的上下文一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10256155/

相关文章:

asp.net-mvc - 在表单提交上发布 Kendo 网格数据

c# - 使用 MVC 自定义身份验证

jquery - Facebook 评论插件

asp.net-mvc-3 - Url.RouteUrl 返回空

c# - 为什么继承不像我认为的那样起作用?

entity-framework - 使用 POCO 时,我应该保持外键与引用同步吗

entity-framework - EF : Proper one-to-zero/one relationship

ios - 从自定义 UIViewController 和 CocoaPods 库多重继承

C++ 子结构与父结构具有不同的变量名称

mysql - EF6 MySQL 更改所有表前缀