7.EFCore中如何操作多个数据库+数据库迁移

环境 EFCore    .NET6

数据库:SqlServer     MySql

第一步:添加指定包源:

 需要指定相同版本

第二步:添加对应数据库的DBContext

sql:

 

public class BlogContext : DbContext
{
    public BlogContext(DbContextOptions<BlogContext> options) : base(options)
    {
    }
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

 

MySql

public class MySqlBlogContext: DbContext
{
    public MySqlBlogContext(DbContextOptions<MySqlBlogContext> options) : base(options)
    {
    }

    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
    //OnConfiguring优先级大于appsettings.json,所以可以覆盖默认配置
    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseMySql("Server=localhost;Database=blog1;User=root;Password=123456;", new MySqlServerVersion(new Version(8, 0, 41)));
    }
}

图示:

 

第三步:appsettings.json配置对应的数据库连接

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "sqlserver": "Server=DR;Database=blogging;User Id=sa;Password=123456;MultipleActiveResultSets=true",
    "mysql": "Server=localhost;Database=blogging;User Id=root;Password=123456;"
  }
}

第四步:Program.cs注入数据库

//Scoped生命周期,每个请求都创建一个新的实例
builder.Services.AddDbContext<BlogContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("sqlserver"));
});
//再注入一个MySqlBlogContext的数据库上下文
builder.Services.AddDbContext<MySqlBlogContext>(options =>
{
    options.UseMySql(builder.Configuration.GetConnectionString("mysql"),new MySqlServerVersion(new Version(8, 0, 41)));
});

后面根据需要使用依赖注入对应的DBContext即可

数据库迁移(通过VS2022控制台操作)

必要条件:Microsoft.EntityFrameworkCore.Tools 必须安装

1.添加

Add-Migration <定义的数据库连接名称> -Context <DBContext数据访问类>

例如:Add-Migration mysql -Context MySqlBlogContext

2.更新

Update-Database -Context <DBContext数据访问类>

例如:Update-Database -Context MySqlBlogContext

结果:

 注明:

数据库的访问优先级为:OnConfiguring > Program.cs注入的数据库连接

 

 

示例代码:

通过百度网盘分享的文件:7.EFCore中如何操作多个数据库+数据库迁移.zip
链接:https://pan.baidu.com/s/15JuGguAlaNhErAsB2X77ww
提取码:jltp
--来自百度网盘超级会员V6的分享

 

posted @ 2025-02-27 19:33  点滴一言  阅读(5)  评论(0编辑  收藏  举报