首页 > 代码库 > C# 根据ADO.NET数据库连接字符串构建EntityFrame数据库连接字符串

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();    }}

 

C# 根据ADO.NET数据库连接字符串构建EntityFrame数据库连接字符串