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();
        }
    }
  • 相关阅读:
    项目实践精解读后感(需求分析注意点)
    XP@Scrum
    项目实践精解读后感2(需求分析注意点)
    十一过后,反思。
    可以自动化功能测试了Selenium
    部分关键字段重复的记录(保留最后记录)
    算是代码优化吗?还可以继续优化吗?
    hql查询~
    通用权限管理设计 之 数据库结构设计(摘录)
    jQuery Liger~
  • 原文地址:https://www.cnblogs.com/nonkicat/p/4171277.html
Copyright © 2011-2022 走看看