• 分离EF connectionString里的db连接串


    创建EF模型后,自动生成的connectionString如下:

    <add name="TravelPPEntities" connectionString="metadata=res://*/TravelPP.csdl|res://*/TravelPP.ssdl|res://*/TravelPP.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=192.168.10.27;initial catalog=TravelPP1;persist security info=True;user id=sa;password=En7Jw5Xh;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient"/>

    其中包括db连接串,用户名尤其密码明文显示不安全, 同时,对于像olap这样的项目,太多的connectionString,不利于统一管理db连接串。

    可以通过如下方法分离db连接串(有了分离的方法, 利用加密手段来做安全控制就有招儿了):

    首先,把上面connectionString里的provider connection string去掉吧, 然后在connectionStrings节点增加:

      <connectionStrings>
        <add name="TravelPPEntities" connectionString="metadata=res://*/TravelPP.csdl|res://*/TravelPP.ssdl|res://*/TravelPP.msl;provider=System.Data.SqlClient;" providerName="System.Data.EntityClient" />
        <add name="TravelPPEntitiesConnection" connectionString="data source=192.168.10.27;initial catalog=TravelPP1;user id=sa;password=En7Jw5Xh;persist security info=True;MultipleActiveResultSets=True;App=EntityFramework"/>
      </connectionStrings>

    然后,在用你的上下文时,按如下方式:

    TravelPPEntities dbEntities = new TravelPPEntities();
    dbEntities.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["TravelPPEntitiesConnection"].ConnectionString;

    然后,就可以做你的crud逻辑了。

    需思考:

    按照上面的方式,在bll层用DbContext派生类时,每声明一个DbContext派生类对象,还要带上指定ConnectionString的代码 ,  这在bll层比较不好。

    如下,在构造器里这样初始化ConnectionString可以达到封装的效果,但是,“此代码是根据模板生成的,如果重新生成代码,则将覆盖对此文件的手动更改。”

    //------------------------------------------------------------------------------
    // <auto-generated>
    //    此代码是根据模板生成的。
    //
    //    手动更改此文件可能会导致应用程序中发生异常行为。
    //    如果重新生成代码,则将覆盖对此文件的手动更改。
    // </auto-generated>
    //------------------------------------------------------------------------------
    
    namespace EF
    {
        using System;
        using System.Data.Entity;
        using System.Data.Entity.Infrastructure;
        
        public partial class TravelPPEntities : DbContext
        {
            public TravelPPEntities()
                : base("name=TravelPPEntities")
            {
                this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["TravelPPEntitiesConnection"].ConnectionString;
            }
        
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                throw new UnintentionalCodeFirstException();
            }
        
            public DbSet<T_Audit_EntContacts> T_Audit_EntContacts { get; set; }
            public DbSet<T_Info_Enterprises> T_Info_Enterprises { get; set; }
            public DbSet<T_Info_Passengers> T_Info_Passengers { get; set; }
            public DbSet<T_User_Account> T_User_Account { get; set; }
            public DbSet<T_User_Role> T_User_Role { get; set; }
            public DbSet<T_User_RoleRelation> T_User_RoleRelation { get; set; }
            public DbSet<T_Info_BusinessDirectory> T_Info_BusinessDirectory { get; set; }
            public DbSet<T_Info_SbhCmpRelation> T_Info_SbhCmpRelation { get; set; }
            public DbSet<T_Info_EnterpriseInterest> T_Info_EnterpriseInterest { get; set; }
        }
    }

    附:

    如下是csdn里有一群程序员在讨论类似EF问题:http://bbs.csdn.net/topics/390398765

  • 相关阅读:
    Leetcode题目62.不同路径(动态规划-中等)
    Leetcode题目56.合并区间(中等)
    Leetcode题目55.跳跃游戏(贪心算法-中等)
    Leetcode题目53.最大子序和(动态规划-简单)
    Leetcode题目49.字母异位词分组(中等)
    Leetcode题目48.旋转图像(中等)
    Leetcode题目46.全排列(回溯+深度优先遍历+状态重置-中等)
    Leetcode题目39.组合总和(回溯+剪枝-中等)
    Android学习笔记-Universal-Image-Loade图片加载框架
    Android学习笔记--使用Apache HttpClient实现网络下载效果,附带进度条显示
  • 原文地址:https://www.cnblogs.com/buguge/p/5545826.html
Copyright © 2020-2023  润新知