using System; using System.Linq; using VolPro.Core.Configuration; using VolPro.Core.Const; using VolPro.Core.DBManager; using VolPro.Core.EFDbContext; using VolPro.Core.Extensions.AutofacManager; using VolPro.Core.UserManager; namespace VolPro.Core.Generic { /// /// 通用数据库操作工厂,根据 DBServer/dbType 返回具体实现 /// public interface IGenericDbProviderFactory { IGenericDbProvider GetProvider(string table = null); IGenericDbProvider Provider { get; } } public class GenericDbProviderFactory : IGenericDbProviderFactory, IDependency { private readonly IServiceProvider _serviceProvider; public IGenericDbProvider Provider { get { return GetProvider(); } } public GenericDbProviderFactory(IServiceProvider serviceProvider) { _serviceProvider = serviceProvider; } public IGenericDbProvider GetProvider(string table = null) { table ??= GenericTableAsyncLocal.CurrentTableName; string dbServer = TableColumnContext.TableInfo .Where(x => x.TableName == table).Select(s => s.DBServer) .FirstOrDefault() ?? typeof(SysDbContext).Name; string dbType = DbRelativeCache.GetDbType(dbServer) ?? DBType.Name; IGenericDbProvider provider = null; switch (dbType) { case "MySql": provider = new GenericMySqlProvider(); break; case "PgSql": provider = new GenericPgSqlProvider(); break; //case "Oracle": // provider = new GenericOracleProvider(); // break; case "MsSql": provider = new GenericSqlServerProvider(); break; default: throw new Exception("数据库暂未支持"); } return provider; } } }