public class ManagementDBContext : DbContext
{
public static string configString = ConfigHelper.GetDatabase;
public ManagementDBContext() : base(configString)
{
Database.SetInitializer<ManagementDBContext>(null);
}
/// <summary>
/// 模型的创建
/// </summary>
/// <param name="modelBuilder"></param>
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// 判断使用的数据库动态控制 Schema
if (ConfigHelper.GetDBType == Enums.Database.Oracle)
{
string schema = GetConfiguration("USER ID");
modelBuilder.HasDefaultSchema(schema);
modelBuilder.Types().Configure(entity => entity.ToTable(entity.ClrType.Name, schema));
}
}
/// <summary>
/// 获取配置连接串
/// </summary>
/// <param name="str">要取的字符名称</param>
/// <returns></returns>
private static string GetConfiguration(string str)
{
if (string.IsNullOrEmpty(str)) str = str.ToUpper();
string con = ConfigHelper.GetConStrings(configString);
string[] strSplit = con.Split(';');
Dictionary<string, string> attribList = new Dictionary<string, string>();
for (int i = 0; i != strSplit.Length; i++)
{
string[] attribValue = strSplit[i].Split('=');
attribList.Add(attribValue[0], attribValue[1]);
}
return attribList[str];
}
/// <summary>
/// 导入Excel
/// </summary>
public DbSet<ImportExcel> importExcel { get; set; }
}
webconfig 内容
<connectionStrings>
<add name="OracleDbContext" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=Teest;Password=Test123;Data Source=localhost:1521/orcl" />
<!--<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=databaseLog;Persist Security Info=True;MultipleActiveResultSets=True;Pooling=true;Max Pool Size=512;Min Pool Size=5;Connection Timeout=120" providerName="System.Data.SqlClient" />-->
<add name="DefaultConnection" connectionString="server=.;database=ManageDB;user id=sa;pwd=sa" providerName="System.Data.SqlClient" />
</connectionStrings>
WebConfig 里配置
<!-- 指定连接数据库 SqlServer/Oracle|0/1-->
<add key="Database" value="0" />
/// <summary>
/// 读取配置工具类
/// </summary>
public class ConfigHelper
{
private static string temp = string.Empty;
private static string database = ConfigurationManager.AppSettings["Database"].ToString().Trim();
private static string upload = ConfigurationManager.AppSettings[StringHelper.UPLOAD.ToLower()].ToString().Trim();
private static string project = AppDomain.CurrentDomain.BaseDirectory.Replace("\\", "/").ToString();
/// <summary>
/// 获取链接的数据库
/// </summary>
public static string GetDatabase
{
get
{
if (!string.IsNullOrEmpty(database))
return GetConnectionDefaultName(database);
else return GetConnectionStrings(StringHelper.WEBCONFIG);
}
}
/// <summary>
/// 读取xml节点名称,返回数据库连接名称
/// </summary>
/// <param name="xmlNodeName"></param>
/// <returns></returns>
private static string GetConnectionStrings(string fileName)
{
string[] array = null;
XmlDocument doc = new XmlDocument();
temp = project + fileName;
if (!FileHelper.FileExists(temp)) return temp;
doc.Load(temp);
XmlNodeList nodeList = doc.DocumentElement.ChildNodes;
if (nodeList.Count > 0)
foreach (XmlNode node in nodeList)
{
if (node.LocalName.ToLower() != StringHelper.CONNECTIONSTRINGS.ToLower())
continue;
array = node.InnerXml.Split('>');
array = array[0].Replace("\"", "").Split(' ');
foreach (var arr in array)
{
if (arr.ToLower().Contains(StringHelper.NAME.ToLower()))
{
array = arr.Split('=');
break;
}
}
}
return temp = array == null ? null : array[1];
}
/// <summary>
/// 动态获取Web.config 中的链接数据库名称
/// </summary>
/// <param name="sqlName"></param>
/// <returns></returns>
public static string GetConnectionDefaultName(string sqlName)
{
string[] array = null;
XmlDocument doc = new XmlDocument();
temp = project + StringHelper.WEBCONFIG;
if (!FileHelper.FileExists(temp)) return temp;
doc.Load(temp);
temp = GetDataBaseName(sqlName);
XmlNodeList nodeList = doc.DocumentElement.ChildNodes;
if (nodeList.Count > 0)
{
foreach (XmlNode node in nodeList)
{
if (node.LocalName.ToLower() == StringHelper.CONNECTIONSTRINGS.ToLower())
{
array = node.InnerXml.Split('>');
break;
}
}
}
if (array.Length > 0)
{
for (int i = 0; i < array.Length - 1; i++)
{
if (array[i].ToLower().Contains(temp))
{
temp = array[i];
break;
}
}
}
array = temp.Replace("\"", "").Split(' ');
foreach (var arr in array)
{
if (arr.ToLower().Contains(StringHelper.NAME.ToLower()))
{
array = arr.Split('=');
break;
}
}
return temp = array == null ? null : array[1];
}
/// <summary>
/// 获取上传文件物理路径
/// </summary>
public static string GetPhysicalPath
{
get
{
if (!string.IsNullOrEmpty(upload))
return project + upload;
else
return project + StringHelper.UPLOAD.ToLower();
}
}
/// <summary>
/// 获取服务器文件路径
/// </summary>
public static string GetServicePath
{
get
{
return FileHelper.IsObliqueBar(GetService) + StringHelper.UPLOAD.ToLower();
}
}
/// <summary>
/// 获取当前项目地址以及端口号
/// </summary>
public static string GetService
{
get
{
return StringHelper.HTTP.ToLower() + "://" + StringHelper.SERVER_NAME + ":" + StringHelper.SERVER_PORT;
}
}
/// <summary>
/// 获取链接数据库字符串
/// </summary>
/// <param name="conName">数据库链接名称</param>
/// <returns></returns>
public static string GetConStrings(string conn)
{
if (!string.IsNullOrEmpty(conn))
return ConfigurationManager.ConnectionStrings[conn].ToString().ToUpper();
else
return conn;
}
/// <summary>
/// 获取当前使用的数据库
/// </summary>
/// <returns></returns>
public static string GetDataBaseName(string dbName)
{
try
{
temp = dbName.ToLower() == StringHelper.ORACLE.ToLower() ? StringHelper.ORACLE.ToLower() :
dbName.ToLower() == StringHelper.SQLSERVER.ToLower() ? StringHelper.SQLCLIENT.ToLower() :
Convert.ToInt32(dbName.ToLower()) == Convert.ToInt32(Database.SqlServer) ? StringHelper.SQLCLIENT.ToLower() :
Convert.ToInt32(dbName.ToLower()) == Convert.ToInt32(Database.Oracle) ? StringHelper.ORACLE.ToLower() : StringHelper.SQLCLIENT.ToLower();
}
catch (Exception)
{
temp = StringHelper.SQLCLIENT.ToLower();
}
return temp;
}
/// <summary>
/// 获取链接数据库类型
/// </summary>
public static Database GetDBType
{
get
{
return GetDatabaseType(database);
}
}
/// <summary>
/// 以枚举类型返回数据库类型
/// </summary>
/// <param name="dbType"></param>
/// <returns></returns>
public static Database GetDatabaseType(string dbType)
{
try
{
return dbType.ToLower() == StringHelper.ORACLE.ToLower() ? Database.Oracle :
dbType.ToLower() == StringHelper.SQLSERVER.ToLower() ? Database.SqlServer :
Convert.ToInt32(dbType.ToLower()) == Convert.ToInt32(Database.SqlServer) ? Database.SqlServer :
Convert.ToInt32(dbType.ToLower()) == Convert.ToInt32(Database.Oracle) ? Database.Oracle : Database.SqlServer;
}
catch (Exception)
{
return Database.SqlServer;
}
}
}
特别注意的地方就是实体类

- mysql,oracle,sql server数据库默认的端口号,端口号可以为负数吗?以及常用协议所对应的缺省端口号
mysql,oracle,sql server数据库默认的端口号? mysql:3306 Oracle:1521 sql server:1433 端口号可以为负吗? 不可以,端口号都有范围的,0~65 ...
- SQL Server 2012不支持从SQL Server 2000的备份进行还原
错误: dbbackup failed: Unable to restore database 'ppt'Not valid backupThe database was backed up on a ...
- 介绍几种大型的Oracle/SQL Server数据库免费版
我们知道,Oracle和SQL Server等大型数据库也都存在一些免费的版本,这些免费的版本已经能够满足许多中小项目的需求.对于在校大学生来说,从学习的目标上来讲,安装免费版的大型数据库也就足够用了 ...
- Oracle,SQL Server 数据库较MySql数据库,Sql语句差异
原文:Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异 1.关系型数据库 百度百科 关系数据库 ...
- 查询获取所有数据库名及数据库中表的集合、数据库连接字符串(类生成器,暂时支持mysql,sql server,后期有oracle再更新)
现所在公司做项目开发时,经常会自己创建model类,网上的生成器也很多,完全满足自己的不太现实,所以感觉自己做一个更有底气,主要针对过程中的一些语句进行整理,也供其他人学习参考. 连接字符串: mys ...
- Oracle & SQL Server 数据传输
在开发中用到的Oracle与SQL Server间数据传输的不同方法的整理,比较.包括原理的简介,配置和实现方法,优缺点的比较,使用平台和DB,适合的应用范围和效能的比较. 整理的方法有如下六种: 1 ...
- 招聘 微软全球技术支持中心 sql server组
微软亚太区全球技术支持中心(APGC CSS)是微软为个人用户.开发者.IT 专业人员到合作伙伴和企业级合作伙伴提供全方位.多元化的服务和技术支持的部门.一个优秀的SQL Server技术支持工程师应 ...
- 使用sql查询mysql/oracle/sql server/gp数据库中指定表的字段信息(字段名/字段类型/字段长度/是否是主键/是否为空)
1,根据数据库类型拼接不同URL /** * 根据类型不同拼接连接的URL * @param dbType 1:mysql.2:oracle.3:sql server.4:gp * @param ip ...
- mysql,oracle,sql server中的默认事务隔离级别查看,更改
未提交读(隔离事务的最低级别,只能保证不读取物理上损坏的数据) 已提交读(数据库引擎的默认级别) 可重复读 可序列化(隔离事务的最高级别,事务之间完全隔离) 可串行化比较严谨,级别高; MySQL m ...
随机推荐
- JDOJ 2157 Increasing
洛谷 P3902 递增 洛谷传送门 JDOJ 2157: Increasing JDOJ传送门 Description 数列A1,A2,--,AN,修改最少的数字,使得数列严格单调递增. Input ...
- 【oracle】drop,truncate,delete用法
drop: drop table 表名:删表 truncate: truncate table 表名:清空数据 delete: delete table 表名 [where 条件]:删某数据 日志:d ...
- 洛谷 P2615 神奇的幻方
传送门 I'm here! 思路 这个题,我们可以直接去模拟,因为范围很小,且\(N\)都是奇数 直接构造一个矩阵,初始值都为\(0\),然后\(while\)循环,根据题目给出的\(4\)个条件进行 ...
- getpeername、getsockname
函数原型: #include<sys/socket.h> int getsockname(int sockfd, struct sockaddr *localaddr, socklen_t ...
- postcss 将px转换成rem vuecli3+vant+vue+postcss
1.安装 npm install postcss-pxtorem --save 2.找到postcss.config.js 默认是这样 module.exports = { "plugins ...
- Xcode一个project多个target
project添加target https://blog.csdn.net/vbirdbest/article/details/53466009 https://www.cnblogs.com/Bob ...
- express框架,使用 static 访问 public 内静态文件
使用 express 生成 node 服务器后,我们需要访问放在public文件夹内的静态文件,如上传的图片 我们需要在app.js中添加配置项: app.use('/public',express. ...
- SharePoint - Another Way to Delete Site Collection
I had created a site collection. But there is a problem of web-frontend server (I did not know when ...
- 命名法:骆驼(Camel)、帕斯卡(pascal)、匈牙利(Hungarian)、下划线(_)
首先欢迎大家到来! 常用的命名法:骆驼(Camel).帕斯卡(pascal).匈牙利(Hungarian).下划线(_) 骆驼:是指混合使用大小写字母来构成变量和函数的名字 帕斯卡:与骆驼命名法类似只 ...
- ef core 全局过滤
有些固定的条件,基本每个查询的时候需要带的条件,我们可以使用全局过滤来帮我们,这样后面的查询就不用每次都带条件了. 微软自带的:https://docs.microsoft.com/zh-cn/ef/ ...