代码之家  ›  专栏  ›  技术社区  ›  mahdi_elahitest

正在Asp中初始化DBContext。净核心

  •  0
  • mahdi_elahitest  · 技术社区  · 7 年前

    我想使用存储库(&A);我的项目中的工作单元。 但在ASP中。NET MVC时使用DBContext来使用此代码

    MyDbContext db=new MyDbContext();
    

    但在ASP中。NET内核编写此代码时需要参数 因为在中使用此代码 DbContext

    public MyDbContext(DbContextOptions<MyDbContext> options) : base(options) { }
    

    错误:
    Error 问题是什么?

    4 回复  |  直到 7 年前
        1
  •  2
  •   Mauricio Gracia Gutierrez    4 年前

    您可以像这样初始化DB上下文:

    var optionBuilder = new DbContextOptionsBuilder<MyDbContext>();
    optionBuilder.UseSqlServer("Server=localhost;...");
    var context = new MyDbContext(optionBuilder.Options);
    

    前面的代码正在配置 options 连接,然后创建 MyDbContext 使用这些选项。

    如果要使用 InMemoryDatabase 例如,对于单元测试,您可以将其更改为:

    var optionBuilder = new DbContextOptionsBuilder<MyDbContext>().UseInMemoryDatabase("testindDB")`;
    
        2
  •  1
  •   Irakli Gabisonia    7 年前
    public MyDbContext(DbContextOptions<MyDbContext> options)
    

    您的中没有空构造函数 MyDbContext 类,所以应该传递参数 DbContextOptions<MyDbContext> options 在构造函数中。

    例如,您可以看到它-> link1

        3
  •  0
  •   ssmith    7 年前

    您不应该实例化DbContext,而应该将其作为存储库的构造函数参数进行请求。然后,IOC容器将在运行时提供DbContext。这确保您可以在整个给定的ASP中使用相同的DbContext。NET web请求,这将防止您可能遇到的大量问题。

    您可以在此处看到通用存储库的示例: http://deviq.com/repository-pattern/

    在ASP中,通常不需要单独的工作单元。NET应用程序(但有时确实如此)。这是因为您的请求应该非常小,您应该能够在单个控制器或服务中完成大部分工作,然后只需通过存储库进行保存。不是你 从不 需要UoW,但与厚客户端方案(如windows应用程序或服务)相比,它的必要性更低。

        4
  •  0
  •   Truc    5 年前

    你可以试试:在你的班上,UnitOfWork

    private MyDBContext _context;
    
    public UnitOfWork(MyDBContext context)
    {
          _context = context;
    }
    

    在控制器中:

    private UnitOfWork _unitOfWork;
    
    public MoviesController(MyDBContext context)
    {
          _unitOfWork = new UnitOfWork(context);
    }