示例#1
0
        public IDbLinkItem GetDbLink(string name)
        {
            IDbLinkItem result = null;

            foreach (var provider in _providers)
            {
                result = provider.GetDbLink(name);
                if (result != null)
                {
                    break;
                }
            }

            return(result);
        }
        public IRepository CreateRepository(IServiceProvider serviceProvider, IDbLinkItem dbLink, params Type[] entityTypes)
        {
            Check.NotNull(dbLink, nameof(dbLink));

            Check.NotNull(serviceProvider, nameof(serviceProvider));

            //if (!_dbProviders.ContainsKey(dbLink.DbType)) throw new Exception($"未找到名称为:{dbLink.DbType}的数据库配置.");

            //var dbProvider = _dbProviders[dbLink.DbType];

            if (!_dbProviders.TryGetValue(dbLink.DbType, out IDbProvider dbProvider))
            {
                throw new Exception($"未找到名称为:{dbLink.DbType}的数据库配置.");
            }

            //var dbContext = new CommonDbContext(dbProvider, dbLink.ConnectionString, modelBuilder =>
            // {
            //     if (entityTypes != null && entityTypes.Length > 0)
            //     {
            //         foreach (var item in entityTypes)
            //         {
            //             _options.GetModelBuilderAction(item).Invoke(modelBuilder);
            //         }
            //     }
            // });

            var dbType = GetCommonDbContextType(entityTypes);

            if (dbType == null)
            {
                throw new Exception($"未能根据传入的实体类型,找到对应的CommonDbContext.参数entityTypes的数量为:{entityTypes?.Length.ToString()}");
            }

            return(new Repository(serviceProvider, () =>
            {
                var dbContext = serviceProvider.GetRequiredService(dbType) as CommonDbContext;

                dbContext?.Init(dbProvider, dbLink.ConnectionString);
                return dbContext;
            }, dbProvider));
        }