private IDatabase CreateDatabase(ContextServiceContext context) { var factory = context.ServiceProvider.TryGetService <IDatabaseFactory>(); if (factory != null) { return(factory.Create(context.Options)); } IDatabase database; if (context.Options.Provider != null && context.Options.ConnectionString != null) { database = new Database(context.Options.ConnectionString, context.Options.Provider).TrySetServiceProvider(context.ServiceProvider); } else { throw new InvalidOperationException(SR.GetString(SRKind.NotSupportDatabaseFactory)); } if (EntityTransactionScope.IsInTransaction()) { database.BeginTransaction(); EntityTransactionScope.Current.Addransaction((string)context.Options.ConnectionString, this); } return(database); }
/// <summary> /// 初始化 <see cref="DefaultContextService"/> 类的新实例。 /// </summary> /// <param name="context"></param> /// <param name="databaseFactory">一个用于创建 <see cref="IDatabase"/> 的工厂函数。</param> public DefaultContextService(ContextServiceContext context) : base(context) { _databaseCreateor = () => CreateDatabase(context); QueryPolicy = new DefaultQueryPolicy(Provider); }
/// <summary> /// 初始化 <see cref="ContextServiceBase"/> 类的新实例。 /// </summary> /// <param name="context"></param> protected ContextServiceBase(ContextServiceContext context) { Provider = context.Options.Provider; ContextType = context.ContextType; ServiceProvider = context.ServiceProvider; Options = context.Options; InstanceName = ContextInstanceManager.TryAdd(context.Options); }
IContextService IContextProvider.CreateContextService(ContextServiceContext context) { return(new DefaultContextService(context)); }