• EntityFramework Core入门教程-12-在ASP.NET Core项目中配置EF Core


    参考资料:
    微软MVP杨旭教程:https://www.bilibili.com/video/BV1xa4y1v7rR?p=11

    准备工作

    添加一个Web API项目并设为启动项目,并添加对Demo.Data和Demo.Domain的引用。

    为该项目安装Microsoft.EntityFrameworkCore.SqlServer库。

    删掉原DbContext中override的OnConfiguring()方法。我看的其他教程中常常都只在OnConfiguring()中配置,而不讲真正的配置方法,让新手非常困惑。杨旭大佬的教程果然最贴合实际。

    在DbContext中建立构造函数,有一个DbContextOptions<DemoDbContext>类的参数options,顺便用base()调用父类的构造函数,并把Options传进去,就可以了:

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

    Web项目中的配置

    回到Web项目中,打开appsettings.json,添加一个配置集合:

    "ConnectionStrings": {
        "LocalDB": "Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=YangDemo;Integrated Security=True"
      }
    

    因为我们可能有开发环境数据库,Staging环境数据库,UAT环境数据库,正式环境数据库等,所以"ConnectionStrings"是一个集合,先给当前用的数据库取名"LocalDB"。

    打开Startup.cs,在ConfigureServices方法(相当于是个容器)进行配置,配置使用EF Core和SqlServer Provider。

    public void ConfigureServices(IServiceCollection services)
    {
        ...
        services.AddDbContext<DemoDbContext>(options =>
        {
            options.UseSqlServer(Configuration.GetConnectionString("LocalDB"));
        });
    }
    

    其中还用到了取配置文件的一种方法,Configuration.GetConnectionString("LocalDB")中Configuration可能是配置文件对应的对象,GetConnectionString取配置文件中名为"ConnectionStrings"的配置项,然后在参数中指定ConnectionStrings中名为"LocalDB"的项。上面这几项搞出连接字符串,作为UseSqlServer()的参数。

    配置好之后,DemoDbContext就可以依赖注入着使用了。

    测试配置是否成功

    去Web API项目自带的WeatherForecastController控制器中,在构造函数中依赖注入DemoDbContext,并生成只读字段来使用:

    ...
    private readonly DemoDbContext _dbContext;
    
    public WeatherForecastController(..., DemoDbContext dbContext)
    {
        ...
        _dbContext = dbContext;
    }
    

    修改一下下面的HttpGet方法:

    [HttpGet]
    public IActionResult Get()
    {
        var clubs = _dbContext.Clubs.ToList();
        // var result = JsonSerializer.Serialize(clubs);
        return Ok(clubs);
    }
    

    运行项目,可以看到查出来的内容以JSON格式呈现。

    得益于我们把Context所在的项目单独分了出来,否则我们从控制台换到Web项目,可能还要重新迁移。

  • 相关阅读:
    Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用
    Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
    Java sun.misc.Unsafe类的学习笔记
    Java 并发编程学习笔记 理解CLH队列锁算法
    深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
    Java并发编程学习笔记 深入理解volatile关键字的作用
    JVM Client Server启动设置
    双重检查锁定与延迟初始化
    Tomcat 添加为系统服务 开机自动启动
    配置TOMCAT 修改默认ROOT路径
  • 原文地址:https://www.cnblogs.com/springsnow/p/13633725.html
Copyright © 2020-2023  润新知