internal static DbConfiguration Get(DbContextOption dbContextOption)
        {
            Guard.NotNull(dbContextOption, "dbContextOption");
            DbConfiguration cfg;

            items.TryGetValue(dbContextOption.Container, out cfg);
            if (cfg == null)
            {
                //自动配置
                cfg = DbConfiguration.Configure(dbContextOption);
            }
            //if(cfg.sqlLogger == null)
            //{
            //    cfg.sqlLogger = dbContextOption.Logger;
            //}
            return(cfg);
        }
示例#2
0
        //连接字符串名称:基于Config文件中连接字符串的配置
        //const string connectionStringName = "DB_Oracle_ConnStr";
        //构造dbConfiguration 对象
        //static DbConfiguration dbConfiguration;

        //static ProtocolDbContext()
        //{
        //    DbContextOption dbContextOption = new DbContextOption() {
        //        Container = "DB_Oracle_ConnStr",
        //        ConnectionString = "",
        //        MappingFile = ""
        //    };
        //    if (!DbConfiguration.Items.TryGetValue(dbContextOption.Container, out dbConfiguration))
        //    {
        //        dbConfiguration = DbConfiguration
        //          .Configure(dbContextOption)
        //          // .SetSqlLogger(() =>SqlLog.Trace)
        //          .SetMappingConversion(MappingConversion.Plural)
        //          .AddClass<ProtocolInfo>()//注册映射类
        //          .AddClass<ProtocolCfgInfo>()//注册映射类
        //          ;

        //    }
        //}

        public ProtocolDbContext(DbContextOption dbContextOption) : base(dbContextOption)
        {
        }
示例#3
0
        /// <summary>
        /// 得到工作单元对象
        /// </summary>
        /// <param name="dbContextOption">配置信息</param>
        /// <returns></returns>
        public static IDbContext Get(DbContextOption dbContextOption)
        {
            Guard.NotNullOrEmpty(dbContextOption.Container, "dbConfigurationName");

            return(DbConfiguration.Configure(dbContextOption).CreateDbContext());
        }
示例#4
0
 /// <summary>
 /// 根据dbConfigurationName 创建DbContext对象
 /// </summary>
 /// <param name="dbConfigurationName"></param>
 public DbContext(DbContextOption dbContextOption) : this(DbConfiguration.Get(dbContextOption))
 {
 }
        /// <summary>
        /// 通过connectionStringName对象创建DbConfiguration对象(可以用于配置文件中有多个数据库连接字符串配置)
        /// </summary>
        /// <param name="dbContextOption"></param>
        /// <returns></returns>
        public static DbConfiguration Configure(DbContextOption dbContextOption)
        {
            Guard.NotNullOrEmpty(dbContextOption.Container, "connectionStringName");
            DbConfiguration cfg;

            if (items.TryGetValue(dbContextOption.Container, out cfg))
            {
                if (cfg.sqlLogger == null)
                {
                    cfg.SetSqlLogger(() => dbContextOption.LogggerFactory.CreateLogger(dbContextOption.Container));
                }
                return(cfg);
            }


            //var item = UCloudConfiguration.Current.GetConnectionString(connectionStringName);

            if (string.IsNullOrEmpty(dbContextOption.Provider))
            {
                throw new ConfigurationErrorsException("connectionString.ProviderName");
            }
            var connectionString = dbContextOption.ConnectionString;

            if (string.IsNullOrEmpty(connectionString))
            {
                throw new ConfigurationErrorsException("ConnectionString");
            }
            DbProviderFactory factory = null;

            try
            {
                factory = DbProviderFactoriesEx.GetFactory(dbContextOption.Provider);
            }
            catch (Exception ex)
            {
                throw new ConfigurationErrorsException(dbContextOption.Provider + " Provider name invalid for" + dbContextOption.Container, ex);
            }



            cfg = new DbConfiguration(dbContextOption.Provider, dbContextOption.Container, connectionString, dbContextOption.Default, factory);
            if (!string.IsNullOrEmpty(dbContextOption.MappingFile))
            {
                cfg.AddFile(dbContextOption.MappingFile);
            }
            else if (!string.IsNullOrEmpty(dbContextOption.ModuleAssemblyName))
            {
                var assembly = Assembly.Load(dbContextOption.ModuleAssemblyName);
                var types    = assembly?.GetTypes();
                var list     = types?.Where(t =>
                                            t.IsClass && !t.IsGenericType && !t.IsAbstract &&
                                            t.GetAttribute <TableAttribute>() != null).ToList();
                if (list != null && list.Any())
                {
                    list.ForEach(t =>
                    {
                        cfg.AddClass(t);
                    });
                }
            }

            cfg.SetSqlLogger(() => dbContextOption.LogggerFactory.CreateLogger(dbContextOption.Container));

            lock (items)
                items[cfg.Name] = cfg;

            AutoMatchDialect(cfg, connectionString, dbContextOption.Provider, factory); if (dbContextOption.ConnectionString != null)
            {
                cfg.MakeDefault();
            }

            return(cfg);
        }