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); }
//连接字符串名称:基于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) { }
/// <summary> /// 得到工作单元对象 /// </summary> /// <param name="dbContextOption">配置信息</param> /// <returns></returns> public static IDbContext Get(DbContextOption dbContextOption) { Guard.NotNullOrEmpty(dbContextOption.Container, "dbConfigurationName"); return(DbConfiguration.Configure(dbContextOption).CreateDbContext()); }
/// <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); }