为了保持开发效率,以及保持代码优雅,项目中引用了EntityFrame。但是又因为某些报表功能需要大量计算,所以又要求直接使用ADO.NET,调用存储过程进行计算。

于是乎webconfig文件中就会出现两种数据库连接字符串。

<!--EntityFrame-->
<connectionStrings>
<add name="GpsDBEntities" connectionString="metadata=res://*/Models.DbModels.XXXX.csdl|res://*/Models.DbModels.XXXX.ssdl|res://*/Models.DbModels.XXXX.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=XXXXX;initial catalog=XXXXX;persist security info=True;user id=XXXX;password=XXXXX;MultipleActiveResultSets=True;App=EntityFramework&quot;"providerName="System.Data.EntityClient" />
</connectionStrings>
<!--ADO.NET-->
<add key="sqlConnectionString" value="server=XXXXX;uid=XXXXX;pwd=XXXX;database=XXXX"></add>

可以这样写又显得累赘,为什么同一个数据库,我要写两次连接字符串。

于是想只保留ADO.NET的数据库连接字符串,在使用EntityFrame的时候,生产EntityFrame专用的数据库连接字符串进行连接。

因此我构建了一个工具类,用来生成EntityFrame的数据库连接字符串。

public sealed class DBConnectionUtil
{
private static string IP { get; set; }
private static string UserId { get; set; }
private static string Password { get; set; }
private static string DBName { get; set; }
public static string EntityConnectionStr { get; set; } public static readonly DBConnectionUtil instance = new DBConnectionUtil();
private DBConnectionUtil()
{
GetDBSetting();
} private void GetDBSetting(){
var connectStr = ConfigurationManager.AppSettings["sqlConnectionString"];
var settingArray = connectStr.Split(';');
foreach (var setting in settingArray)
{
var keyVal = setting.Split('=');
switch (keyVal[])
{
case "server": IP = keyVal[]; break;
case "uid": UserId = keyVal[]; break;
case "pwd": Password = keyVal[]; break;
case "database": DBName = keyVal[]; break;
}
} EntityConnectionStr = "metadata=res://*/Models.DbModels.GpsDB.csdl|res://*/Models.DbModels.GpsDB.ssdl|res://*/Models.DbModels.GpsDB.msl;provider=System.Data.SqlClient;provider connection string=\"data source=" + IP + ";initial catalog=" + DBName + ";persist security info=True;user id=" + UserId + ";password=" + Password + ";MultipleActiveResultSets=True;App=EntityFramework\"";
}
}

然后在使用时直接调用即可。

public partial class XXXXX : DbContext
{
public XXXXX()
: base(DBConnectionUtil.EntityConnectionStr)
{
} protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
throw new UnintentionalCodeFirstException();
}
}

C# 根据ADO.NET数据库连接字符串构建EntityFrame数据库连接字符串的更多相关文章

  1. Java基础——字符串构建器

    StringBuilder类: 可以将许多小段的字符串构建一个字符串. StringBuilder builder = new StringBuilder(); //构造一个空的字符串构建器 buil ...

  2. BAT批处理中的字符串处理详解(字符串截取)

    BAT批处理中的字符串处理详解(字符串截取)   BAT批处理中的字符串处理详解(字符串截取 批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集.批处理中可实现的字符串处理 ...

  3. 【转】BAT批处理中的字符串处理详解(字符串截取)

    下面对这些功能一一进行讲解. 1.截取字符串 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符.举例说明其基本功能: @echo off set ...

  4. 不可变字符串String与可变字符串StringBuilder、StringBuffer使用详解

    String字符串 char类型只能表示一个字符,而String可以表示字符串,也就是一个字符序列.但String不是基本类型,而是一个定义好的类,是一个引用类型.在Java中,可以将字符串直接量赋给 ...

  5. Java 字符串(二)字符串常用操作

    一.连接字符串 1.连接多个字符串 使用“+”运算符可以实现连接多个字符串的功能.“+” 运算符可以连接多个运算符并产生一个 String 对象. 2.连接其他数据类型 字符串与其他基本数据类型进行连 ...

  6. golang中字符串-字节切片,字符串-字符切片的互转

    package main import ( "fmt" "reflect" ) func B2S(bs []uint8) string { // 将字节切片转换 ...

  7. JS字符串替换函数:Replace(“字符串1″, “字符串2″),

    JS字符串替换函数:Replace(“字符串1″, “字符串2″), 1.我们都知道JS中字符串替换函数是Replace(“字符串1″, “字符串2″),但是这个函数只能将第一次出现的字符串1替换掉, ...

  8. C#算法之判断一个字符串是否是对称字符串

    记得曾经一次面试时,面试官给我电脑,让我现场写个算法,判断一个字符串是不是对称字符串.我当时用了几分钟写了一个很简单的代码. 这里说的对称字符串是指字符串的左边和右边字符顺序相反,如"abb ...

  9. 将数据转化成字符串时:用字符串的链接 还是 StringBuilder

    /* 目的:将数据转化成字符串时:用字符串的链接 还是 StringBuilder呢? */ public class Test{ public static void main(String[] a ...

随机推荐

  1. 基于php的snmp管理端开发

    一.系统环境: 操作系统:CentOS 5.4                内核:Linux_2.6 编译环境:gcc 4.1.2                代码版本:php-5.2.8.tar ...

  2. XSS Filter绕过

    之前挖到某金融网站的xss 但是困于xss filter无奈不好下手.只能在火狐下弹窗. 以下该图是我的测试. 后来发给一个Invoker哥们儿.成功给我发来payload成功绕过了XSS Filte ...

  3. ACM-括号匹配问题

    对ACM仰慕已久,无奈今天才开始.好吧,遇到的第二个题目就把我难到了.(实话是第一个) 进入正题,下面Copy出题目:  现在,有一行括号序列,请你检查这行括号是否配对. 输入 第一行输入一个数N(0 ...

  4. hibernate 学习知识总结

    1.最近用hibernate 学会很多知识,总结如下: (1)数据库表格已经设置默认值,在进行数据插入的时候,bean里面不赋值的话,插入之后该字段依旧是null 是因为hibernate默认插入和更 ...

  5. mysql bin-log 使用说明

    如何开启bin-log日志? vi /etc/my.cnf [mysqld] log-bin=mysql-bin 默认开启 ls /usr/local/mysql/data/ mysql-bin.00 ...

  6. 28 GroupSock(NetAddress)——live555源码阅读(四)网络

    28 GroupSock(NetAddress)——live555源码阅读(四)网络 28 GroupSock(NetAddress)——live555源码阅读(四)网络 简介 1) NetAddre ...

  7. Docker内部存储结构(devicemapper)解析(续)

    dm.fs 参数dm.fs可以指定容器的rootfs的文件系统,但只支持ext4/xfs: func NewDeviceSet(root string, doInit bool, options [] ...

  8. [k]自定义样式下拉菜单

    自定义样式下拉菜单-1 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"> & ...

  9. JQ添加标签

    <script type="text/javascript" src="http://files.cnblogs.com/914556495wxkj/jquery- ...

  10. POJ 1190(深搜)

    http://poj.org/problem?id=1190 又有好久没做搜索的题了,没想到做一个卡了我那么久,想哭啊. 一个中文题,思路呢也就是搜索呗,一层一层往上面搜,不过这里有两个比较重要的地方 ...