zoukankan      html  css  js  c++  java
  • C# 根据ADO.NET数据库连接字符串构建EntityFrame数据库连接字符串

    为了保持开发效率,以及保持代码优雅,项目中引用了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[0]) 
                {
                    case "server": IP = keyVal[1]; break;
                    case "uid": UserId = keyVal[1]; break;
                    case "pwd": Password = keyVal[1]; break;
                    case "database": DBName = keyVal[1]; 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();
        }
    }
  • 相关阅读:
    JNDI使用小记
    Python基础之字符串
    openstack装B之路http协议
    openstack装B之路keystone
    Python基础之列表
    openstack装B之路Keystone部署以及操作
    openstack装B之路网关协议
    纵表与横表互转的SQL
    Asp.Net请求管道中的19个事件
    jquery ajax post get
  • 原文地址:https://www.cnblogs.com/nonkicat/p/4171277.html
Copyright © 2011-2022 走看看