Files
SecMPS/api_sqlsugar/VolPro.Core/Generic/GenericDbProviderFactory.cs
2026-05-15 23:22:48 +08:00

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;
}
}
}