68 lines
2.1 KiB
C#
68 lines
2.1 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// 通用数据库操作工厂,根据 DBServer/dbType 返回具体实现
|
|
/// </summary>
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|