为了保持开发效率,以及保持代码优雅,项目中引用了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. OpenCv椭圆皮肤模型

    Mat input_image; Mat output_mask; Mat output_image; void main() { VideoCapture cam(); if (!cam.isOpe ...

  2. caffe_windows安装

    CUDA:链接:http://pan.baidu.com/s/1nvyA3Qp 密码:h0f3 cudnn:链接:http://pan.baidu.com/s/1hr3Ug76 密码:vmdq caf ...

  3. Hibernate 多对多关联映射, 中间表加查询条件

    package com.coracle.yk.xpo.po.base; import java.util.Date; import java.util.HashSet; import java.uti ...

  4. ASP.NET MVC Area使用-将Area设置成独立项目

    环境说明:Vistual Studio 2013 MVC 4.0 其实关于ASP.NET MVC Area使用的基础知识可以参考 http://www.cnblogs.com/willick/p/33 ...

  5. 【leetcode】Partition List

    Partition List Given a linked list and a value x, partition it such that all nodes less than x come ...

  6. 常见web错误码 404 500

    404表示文件或资源未找到java WEB常见的错误代码1.1xx-信息提示:这些状态代码表示临时的响应.客户端在收到常规响应之前,应准备接收一个或多个1xx响应.100-继续.101-切换协议.2. ...

  7. 网页中超链接的简化问题(如何避免超链接的get提交)

    废话不多,直接看例子吧: <a href="###?key=${*** }">跳转</a> 上面这个超链接被点击后,肯定会向某个控制器发送一个get请求,而 ...

  8. [Android] how to get facebook profile

    Bundle params = new Bundle(); params.putString("fields", "id,email,gender,cover,pictu ...

  9. Centos6.5 SVN服务器 搭建及配置

    现有的项目开发中,版本控制机必不可少.合理的使用版本控制可以提高开发效果,在保证项目是最新的同时,也提高了源代码的安全性. 工具/原料 接入Internet的一台Centos6.5Linux计算机 安 ...

  10. AIX系统的环境变量设置

    AIX系统的环境变量设置 用户环境的定义是通过设置环境变量来实现的.AIX系统主要使用两大类profile文件来定义用户环境.一类是用来为所有用户定制环境,另一类是为个人定义自己的环境. 登录时,sh ...