public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); //TODO: Object materialize event //TODO: Apply current filters to this dbcontext if (Options.IsTransactional == true) { BeginTransaction(dbContext); } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
/// <summary> /// 获取或创建数据库上下文 /// </summary> /// <typeparam name="TDbContext">数据库上下文对象</typeparam> /// <param name="multiTenancySide">多租户双方中的一方</param> /// <returns>数据库上下文对象</returns> public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => { ObjectContext_ObjectMaterialized(dbContext, args); }; FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext); ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>() where TDbContext : EfCoreDbContextBase { var concreteDbContextType = typeof(TDbContext); var connectionString = base.ConnectionStringResolver.GetNameOrConnectionString(); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; EfCoreDbContextBase dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { dbContext = TransactionStrategy.CreateDbContext <TDbContext>(connectionString, DbContextResolver); } else { dbContext = DbContextResolver.Resolve <TDbContext>(connectionString, null); } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); //((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => //{ // ObjectContext_ObjectMaterialized(dbContext, args); //}; //foreach (var filter in Filters) //{ // if (filter.IsEnabled) // { // dbContext.EnableFilter(filter.FilterName); // } // else // { // dbContext.DisableFilter(filter.FilterName); // } // foreach (var filterParameter in filter.FilterParameters) // { // if (TypeHelper.IsFunc<object>(filterParameter.Value)) // { // dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, (Func<object>)filterParameter.Value); // } // else // { // dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, filterParameter.Value); // } // } //} if (Options.IsTransactional == true) { BeginTransaction(dbContext); } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
private void DisposeUow() { foreach (var context in ActiveDbContexts.Values) { context.Dispose(); iocResolver.Release(context); } ActiveDbContexts.Clear(); }
public virtual void AddDbContext(string name, NamedDbContext dbContext) { if (ActiveDbContexts.ContainsKey(name)) { return; } ActiveDbContexts.Add(name, dbContext); _dbContextAddedEvent(dbContext); }
protected override void DisposeUow() { ActiveDbContexts.Values.ForEach(Release); ActiveDbContexts.Clear(); if (CurrentTransaction != null) { CurrentTransaction.Dispose(); CurrentTransaction = null; } }
protected override void DisposeUow() { if (SharedTransaction != null) { SharedTransaction.Dispose(); SharedTransaction = null; } GetAllActiveDbContexts().ForEach(Release); ActiveDbContexts.Clear(); }
public virtual NamedDbContext GetDbContext(string name) { if (!ActiveDbContexts.ContainsKey(name)) { return(null); } NamedDbContext context; ActiveDbContexts.TryGetValue(name, out context); return(context); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>() where TDbContext : DbContext { //todo: 区分oracle和sqlserver数据库 //var connectionString = "DefaultConnection"; var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); string connectionString; string schema = null; if (DbConnectionHelper.DbCatagory == DBType.Oracle.ToString()) { connectionString = ResolveConnectionString(ref schema); connectionString = "Oracle"; } else { connectionString = ResolveConnectionString(); } var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { //解析出来的是TransactionScopeEfTransactionStrategy dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver, schema); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); } DbContexts.Add(dbContext); //if (Options.Timeout.HasValue && !dbContext.Database.CommandTimeout.HasValue) //{ // dbContext.Database.CommandTimeout = Options.Timeout.Value.TotalSeconds.To<int>(); //} ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => { ObjectContext_ObjectMaterialized(dbContext, args); }; ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
protected override void DisposeUow() { if (Options.IsTransactional == true) { _transactionStrategy.Dispose(IocResolver); } else { GetAllActiveDbContexts().ForEach(Release); } ActiveDbContexts.Clear(); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null, string name = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; if (name != null) { dbContextKey += "#" + name; } DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); } if (Options.Timeout.HasValue && !dbContext.Database.CommandTimeout.HasValue) { dbContext.Database.CommandTimeout = Options.Timeout.Value.TotalSeconds.To <int>(); } if (Clock.SupportsMultipleTimezone) { ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => { ObjectContext_ObjectMaterialized(dbContext, args); }; } FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext); ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext, TEntity>(MultiTenancySides?multiTenancySide = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var entityAssemblyId = typeof(TEntity).Assembly.GetName().Name; if (!entityConfigurations.Any(e => string.Equals(e.EntityModule, entityAssemblyId, StringComparison.OrdinalIgnoreCase))) { throw new BlocksDBORMException(StringLocal.Format($"{entityAssemblyId} not found in EntityConfigurations.")); } var moduleName = entityAssemblyId; //extensionManager.GetExtension(typeof(TEntity).Assembly.GetName().Name).Name; var dbContextKey = moduleName + "#" + concreteDbContextType.FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver, moduleName); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString, moduleName); } if (Options.Timeout.HasValue && !dbContext.Database.GetCommandTimeout().HasValue) { dbContext.Database.SetCommandTimeout(SafeConvert.ToInt32(Options.Timeout.Value.TotalSeconds)); } //TODO ObjectMaterialize //((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => //{ // ObjectContext_ObjectMaterialized(dbContext, args); //}; // FilterExecuter.As<IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext); ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null) where TDbContext : DbContext { var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = typeof(TDbContext).FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => { ObjectContext_ObjectMaterialized(dbContext, args); }; foreach (var filter in Filters) { if (filter.IsEnabled) { dbContext.EnableFilter(filter.FilterName); } else { dbContext.DisableFilter(filter.FilterName); } foreach (var filterParameter in filter.FilterParameters) { if (TypeHelper.IsFunc <object>(filterParameter.Value)) { dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, (Func <object>)filterParameter.Value); } else { dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, filterParameter.Value); } } } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
protected override void DisposeUow() { if (Options.IsTransactional == true) { _transactionStrategy.Dispose(IocResolver); } else { foreach (var activeDbContext in ActiveDbContexts.Values) { Release(activeDbContext); } } ActiveDbContexts.Clear(); }
protected override void DisposeUow() { if (Options.IsTransactional == true) { transactionStrategy.Dispose(IocResolver); } else { foreach (var context in GetAllActiveDbContexts()) { Release(context); } } ActiveDbContexts.Clear(); }
public virtual async Task <TDbContext> GetOrCreateDbContextAsync <TDbContext>( MultiTenancySides?multiTenancySide = null, string name = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide) { ["DbContextType"] = typeof(TDbContext), ["DbContextConcreteType"] = concreteDbContextType }; var connectionString = await ResolveConnectionStringAsync(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; if (name != null) { dbContextKey += "#" + name; } if (ActiveDbContexts.TryGetValue(dbContextKey, out var dbContext)) { return((TDbContext)dbContext); } if (Options.IsTransactional == true) { dbContext = await _transactionStrategy .CreateDbContextAsync <TDbContext>(connectionString, _dbContextResolver); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); } if (dbContext is IShouldInitializeDcontext abpDbContext) { abpDbContext.Initialize(new AbpEfDbContextInitializationContext(this)); } FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext); ActiveDbContexts[dbContextKey] = dbContext; return((TDbContext)dbContext); }
/// <summary> /// 获取或者创建数据库上下文 /// </summary> /// <typeparam name="TDbContext">数据库上下文类型</typeparam> /// <param name="name">名称</param> /// <returns>数据库上下文对象</returns> public virtual TDbContext GetOrCreateDbContext <TDbContext>(string name = null) where TDbContext : DbContext { var dbContextType = typeof(TDbContext); // TODO: 这里获取连接字符串,有待开发 var nameOrConnectionString = "Default"; var dbContextKey = $"{dbContextType.FullName}#{nameOrConnectionString}"; if (string.IsNullOrWhiteSpace(name)) { dbContextKey = $"{dbContextKey}#{name}"; } DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { dbContext = _transactionStrategy.CreateDbContext <TDbContext>(nameOrConnectionString, _dbContextResolver); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(nameOrConnectionString, null); } if (Options.Timeout.HasValue && dbContext.Database.IsRelational() && !dbContext.Database.GetCommandTimeout().HasValue) { var commandTimeout = Convert.ToInt32(Options.Timeout.Value.TotalSeconds); //dbContext.Database.SetCommandTimeout(Options.Timeout.Value.TotalSeconds.To<int>()); dbContext.Database.SetCommandTimeout(commandTimeout); } //TODO: Object materialize event //TODO: Apply current filters to this dbcontext ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>(MultiTenancySides?multiTenancySide = null, string name = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide); connectionStringResolveArgs["DbContextType"] = typeof(TDbContext); connectionStringResolveArgs["DbContextConcreteType"] = concreteDbContextType; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; if (name != null) { dbContextKey += "#" + name; } DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (Options.IsTransactional == true) { dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString, null); } if (Options.Timeout.HasValue && dbContext.Database.IsRelational() && !dbContext.Database.GetCommandTimeout().HasValue) { dbContext.Database.SetCommandTimeout(Options.Timeout.Value.TotalSeconds.To <int>()); } //TODO: Object materialize event //TODO: Apply current filters to this dbcontext ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>( MultiTenancySides?multiTenancySide = null, string name = null) where TDbContext : DbContext { var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionStringResolveArgs = new ConnectionStringResolveArgs(multiTenancySide) { ["DbContextType"] = typeof(TDbContext), ["DbContextConcreteType"] = concreteDbContextType }; var connectionString = ResolveConnectionString(connectionStringResolveArgs); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; if (name != null) { dbContextKey += "#" + name; } if (ActiveDbContexts.TryGetValue(dbContextKey, out var dbContext)) { return((TDbContext)dbContext); } if (Options.IsTransactional == true) { dbContext = _transactionStrategy .CreateDbContext <TDbContext>(connectionString, _dbContextResolver); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString, null); } if (dbContext is IShouldInitializeDcontext abpDbContext) { abpDbContext.Initialize(new AbpEfDbContextInitializationContext(this)); } ActiveDbContexts[dbContextKey] = dbContext; return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>() where TDbContext : DbContext { var connectionString = "Default";//这里简化直接写死 测试时用WebTest var dbContextKey = typeof(TDbContext).FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { dbContext = _efTransactionStrategy.CreateDbContex <TDbContext>(connectionString, IocResolve); if (!dbContext.Database.CommandTimeout.HasValue) { dbContext.Database.CommandTimeout = 30;//默认30秒 } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
public virtual TDbContext GetOrCreateDbContext <TDbContext>() where TDbContext : DbContext { var dbContextKey = typeof(TDbContext).FullName; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { dbContext = _dbContextResolver.Resolve <TDbContext>(); ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += ObjectContext_ObjectMaterialized; foreach (var filter in Filters) { if (filter.IsEnabled) { dbContext.EnableFilter(filter.FilterName); } else { dbContext.DisableFilter(filter.FilterName); } foreach (var filterParameter in filter.FilterParameters) { if (TypeHelper.IsFunc <object>(filterParameter.Value)) { dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, (Func <object>)filterParameter.Value); } else { dbContext.SetFilterScopedParameterValue(filter.FilterName, filterParameter.Key, filterParameter.Value); } } } ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
/// <summary> /// uow完成后自动释放 /// </summary> protected override void DisposeUow() { //DbContext.Dispose(); if (null == Options) { return; } if (Options.IsTransactional == true) { foreach (var dbContext in DbContexts) { IocResolver.Release(dbContext); } DbContexts.Clear(); if (CurrentTransaction != null) { CurrentTransaction.Dispose(); CurrentTransaction = null; } } else { foreach (var activeDbContext in ActiveDbContexts.Values.ToImmutableList()) { Release(activeDbContext); } } if (CurrentTransaction != null) { CurrentTransaction.Dispose(); CurrentTransaction = null; } ActiveDbContexts.Clear(); }
/// <summary> /// 获取dbContext /// </summary> /// <typeparam name="TDbContext"></typeparam> /// <returns></returns> public virtual TDbContext GetOrCreateDbContext <TDbContext>() where TDbContext : DbContext { //1:找到dbContext var concreteDbContextType = _dbContextTypeMatcher.GetConcreteType(typeof(TDbContext)); var connectionString = ResolveConnectionString(); var dbContextKey = concreteDbContextType.FullName + "#" + connectionString; DbContext dbContext; if (!ActiveDbContexts.TryGetValue(dbContextKey, out dbContext)) { if (DefaultOptions.IsTransactional == true) { dbContext = _transactionStrategy.CreateDbContext <TDbContext>(connectionString, _dbContextResolver); } else { dbContext = _dbContextResolver.Resolve <TDbContext>(connectionString); } if (DefaultOptions.Timeout.HasValue && !dbContext.Database.CommandTimeout.HasValue) { dbContext.Database.CommandTimeout = DefaultOptions.Timeout.Value.TotalSeconds.To <int>(); } ((IObjectContextAdapter)dbContext).ObjectContext.ObjectMaterialized += (sender, args) => { ObjectContext_ObjectMaterialized(dbContext, args); }; FilterExecuter.As <IEfUnitOfWorkFilterExecuter>().ApplyCurrentFilters(this, dbContext); ActiveDbContexts[dbContextKey] = dbContext; } return((TDbContext)dbContext); }
protected override void DisposeUnit() { _efTransactionStrategy.Dispose(IocResolve); ActiveDbContexts.Clear(); }