using System.Configuration;
using Learun.Ioc;
using Microsoft.Practices.Unity;
namespace Learun.DataBase.Repository
{
///
/// 根据配置文件等取拿数据库信息。用于new的。只不过这里用的是IOC注入的方式,所以字眼上看不到new
///
public class DbFactory
{
public static DatabaseType GetIDatabaseType()
{
return DbFactory.GetDbType(ConfigurationManager.ConnectionStrings["BaseDb"].ProviderName);
}
///
/// 默认走的是XmlConig下,database.config下的BaseDb这个节点下的字符串。
/// 首先走Web.config,然后里面指向了Xmlconfig下的database.config
///
///
public static IDatabase GetIDatabase()
{
//if (!Computer.IsSameComputer())
//{
// throw new Exception("该电脑没有授权,请联系管理员!");
//}
return DbFactory.GetIDatabaseByIoc(DbFactory.GetDbType(ConfigurationManager.ConnectionStrings["BaseDb"].ProviderName).ToString(), "BaseDb");
}
public static IDatabase GetIDatabase(string connString, DatabaseType dbType)
{
return DbFactory.GetIDatabaseByIoc(dbType.ToString(), connString);
}
public static IDatabase GetIDatabase(string connString, string dbType)
{
return DbFactory.GetIDatabaseByIoc(dbType, connString);
}
public static IDatabase GetIDatabase(string name)
{
return DbFactory.GetIDatabaseByIoc(DbFactory.GetDbType(ConfigurationManager.ConnectionStrings[name].ProviderName).ToString(), name);
}
///
/// 根据信息去注入(实例化)一个数据库连接对象
///
/// 目前有ora sql mysql
///
///
public static IDatabase GetIDatabaseByIoc(string name, string connString)
{
return UnityIocHelper.Instance.GetService(name, new ParameterOverride[]
{
new ParameterOverride("connString", connString)
});
}
private static DatabaseType GetDbType(string providerName)
{
DatabaseType result;
if (!(providerName == "System.Data.SqlClient"))
{
if (!(providerName == "MySql.Data.MySqlClient"))
{
if (!(providerName == "Oracle.ManagedDataAccess.Client"))
{
result = DatabaseType.SqlServer;
}
else
{
result = DatabaseType.Oracle;
}
}
else
{
result = DatabaseType.MySql;
}
}
else
{
result = DatabaseType.SqlServer;
}
return result;
}
}
}