设为首页 加入收藏

TOP

EF Core 实现读写分离的最佳方案(五)
2019-10-09 19:59:10 】 浏览:160
Tags:Core 实现 读写 分离 最佳 方案
onnectionOptions> DbConnections { get; set; } } public class FxOptionsSetup: IConfigureOptions<FxOptions> { private readonly IConfiguration _configuration; public FxOptionsSetup(IConfiguration configuration) { _configuration = configuration; } /// <summary> /// 配置options各属性信息 /// </summary> /// <param name="options"></param> public void Configure(FxOptions options) { SetDbConnectionsOptions(options); // ... } private void SetDbConnectionsOptions(FxOptions options) { var dbConnectionMap = new Dictionary<string, DbConnectionOptions>(); options.DbConnections = dbConnectionMap; IConfiguration section = _configuration.GetSection("FxCore:DbConnections"); Dictionary<string, DbConnectionOptions> dict = section.Get<Dictionary<string, DbConnectionOptions>>(); if (dict == null || dict.Count == 0) { string connectionString = _configuration["ConnectionStrings:DefaultDbContext"]; if (connectionString == null) { return; } dbConnectionMap.Add("DefaultDb", new DbConnectionOptions { ConnectionString = connectionString, DatabaseType = options.DefaultDatabaseType }); return; } var ambiguous = dict.Keys.GroupBy(d => d).FirstOrDefault(d => d.Count() > 1); if (ambiguous != null) { throw new Exception($"数据上下文配置中存在多个配置节点拥有同一个数据库连接名称,存在二义性:{ambiguous.First()}"); } foreach (var db in dict) { dbConnectionMap.Add(db.Key, db.Value); } } } /// <summary> /// DbContextOptionsBuilder配置选项 /// </summary> public class DbContextOptionsBuilderOptions { /// <summary> /// 配置DbContextOptionsBuilder, dbName指定数据库名称, 为null时表示所有数据库,默认为null /// </summary> /// <param name="build"></param> /// <param name="dbName"></param> /// <param name="dbContextType"></param> public DbContextOptionsBuilderOptions(DbContextOptionsBuilder build, string dbName = null, Type dbContextType = null) { Builder = build; DbName = dbName; DbContextType = dbContextType; } public DbContextOptionsBuilder Builder { get; } public string DbName { get; } public Type DbContextType { get; } }

FxOptions是业务系统的配置选项(随便取得), 在通过service.GetService<IOptions >()时会调用IConfigureOptions 完成FxOptions的初始化. DbContextOptionsBuilderOptions用来提供DbContextOptionsBuilder的相关配置

    public interface IDbContextOptionsBuilderUser
    {
        /// <summary>
        /// 获取 数据库类型名称,如 SQLSERVER,MYSQL,SQLITE等
        /// </summary>
        DatabaseType Type { get; }

        /// <summary>
        /// 使用数据库
        /// </summary>
        /// <param name="builder">创建器</param>
        /// <param name="connectionString">连接字符串</param>
        /// <returns></returns>
        DbContextOptionsBuilder Use(DbContextOptionsBuilder builder, string connectionString);
    }
    
    public class SqlServerDbContextOptionsBuilderUser : IDbContextOptionsBuilderUser
    {
        public DatabaseType Type => DatabaseType.SqlServer;

        public DbContextOptionsBuilder Use(DbContextOptionsBuilder builder, string connectionString)
        {
            return builder.UseSqlServer(connectionString);
        }
    }

IDbContextOptionsBuilderUser接口用来适配不同的数据库来源

使用

{
    "FxCore": {
        "DbConne
首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇矩阵连乘求解优化 下一篇在 ASP.NET Core 项目中使用 Auto..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目