Web 应用程序中的 EF 核心

我不知道如何创建我的 DBContext。


我在 DI 注册了上下文:


services.AddDbContext<myContext>(options =>

            {

                options.UseSqlServer(Configuration.GetConnectionString("myContextConexionString "));

            });

现在我的问题很简单:如何从任何其他类方法访问?


MSDN 上没有一个单独的例子“把它放在控制器构造函数上,然后把它传递出去”


编辑 :


更准确地说(因为大多数人只是添加指向我已经阅读过的文档的链接):


这是我想使用 DBContext 的班级:


public class MYclass

{

    public void MyMethod()

    {

        //get DBcontext here

    }

}


aluckdog
浏览 254回答 2
2回答

慕森卡

我可以想到将 DbContext 放入其他类的三种方法。您的控制器可以获取依赖项并将其传递给其他类。这不是很优雅,现在你的控制器必须包含很多样板来传递与它没有直接关系的东西使用服务定位器模式让类从 IoC 容器请求依赖项。这通常被认为是一种反模式解决这个问题的最简洁的方法是让 IoC 容器实例化具有依赖项的类,以便它可以解析其依赖项。以下是第 3 种方法的示例:public class MyService : IMyService{&nbsp; &nbsp; readonly MyDbContext _context;&nbsp; &nbsp; public MyService(MyDbContext context)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; _context = context;&nbsp; &nbsp; }&nbsp; &nbsp; public void DoSomeWork()&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; //Now you can use the context here&nbsp; &nbsp; }}public interface IMyService{&nbsp; &nbsp; void DoSomeWork();}public class MyController : Controller{&nbsp; &nbsp; readonly IMyService _myService;;&nbsp; &nbsp; public MyController(IMyService myService)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; _myService = myService;&nbsp; &nbsp; }}//In your ConfigureServices methodservices.AddDbContext<myContext>(options =>{&nbsp; &nbsp; options.UseSqlServer(Configuration.GetConnectionString("myContextConexionString"));});services.AddScoped<IMyService, MyService>();通过遵循此模式,您的控制器无需了解 MyService 的依赖项。它只需要通过它的构造函数请求一个 IMyService,它就会收到一些已经完全解决所有依赖关系的东西。该视频更深入地介绍了这种模式。

守着一只汪

AddDbContext您在 Startup 中执行的调用将上下文添加到 IoC 容器。然后你可以要求 IoC 容器像这样将它注入你的控制器public class MyController : Controller{&nbsp; &nbsp; private readonly myContext _context;&nbsp; &nbsp; public MyController(myContext context)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; _context = context;&nbsp; &nbsp; }}然后使用它来访问您的数据。
打开App,查看更多内容
随时随地看视频慕课网APP