EF Core 实战教程(七)通过读取appsetting.json数据库链接字符串链接数据库
小白浏览:8212022-09-18 11:42:53本文累计收益:0我也要赚钱

《EF Core 实战教程(一)配置环境及使用code first 创建数据库》文章介绍了EF Core如何链接数据库,当时把数据库链接字符串写到代码里面了,实际开发中数据库链接字符串一般写到配置文件中,本文主要讲解如果读取配置文件中的链接字符串连接数据库,首先在项目中的appsetting.json文件中增加数据库链接字符串。

appsetting.json配置文件代码如下:
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "ConnectionStrings": {
    "ConnectionString": "Data Source=.;Initial Catalog=EFCoreTest;Persist Security Info=True;User ID=sa;Password=*******"
  },
  "AllowedHosts": "*"
}
然后需要修改DbContext实现类中的的代码:
修改之前:
public class TestDbContext:DbContext
{
    //映射到数据库表名
    public DbSet<Book> Books { get; set; }
    public DbSet<Person> Persons { get; set; }
    public DbSet<Dog> Dogs { get; set; }
 
    /// <summary>
    /// 重写OnConfiguring实现数据库连接
    /// </summary>
    /// <param name="optionsBuilder"></param>
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);
        optionsBuilder.UseSqlServer("Data Source=.;Initial Catalog=Advanced11;Persist Security Info=True;User ID=sa;Password=*******");
    }
    /// <summary>
    /// 加载第二步的Fluent Api实体配置
    /// </summary>
    /// <param name="modelBuilder"></param>
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        //从指定程序集里面添加实体配置类
        modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
    }
}
修改之后的代码如下:
    public class MyDbContext:DbContext
    {
        public DbSet<Person> Persons { get; set; }
        public DbSet<Education> Educations { get; set; }
        public DbSet<User> Users { get; set; }
        public DbSet<Leave> Leaves { get; set; }
        public DbSet<OrgUnit> OrgUnits { get; set; }
        //通过json 读取数据库连接字符串
        //依赖于 Microsoft.Extensions.Configuration; Microsoft.Extensions.Configuration.Json
        private ConfigurationBuilder cfgBuilder = new ConfigurationBuilder();
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
            cfgBuilder.AddJsonFile("appsettings.json",optional:true,reloadOnChange:true);
            IConfigurationRoot configRoot = cfgBuilder.Build();
            string connStr = configRoot.GetSection("ConnectionStrings:ConnectionString").Value;
            optionsBuilder.UseSqlServer(connStr);
            //输出日志到控制台-方式1
            optionsBuilder.LogTo(msg => {
                if (!msg.Contains("CommandExecuting")) return;
                Console.WriteLine(msg);
            });

        }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            //从指定程序集里面添加实体配置类
            modelBuilder.ApplyConfigurationsFromAssembly(this.GetType().Assembly);
        }
    }

 

评论列表
发表评论
+ 关注