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的分享
C#相关写法