EntityFrameWork Code First 多数据库以及自定义字符串的使用+连接字符串加密调用

来源:互联网 发布:魔兽世界tbc数据库 编辑:程序博客网 时间:2024/06/09 22:06

PS:本来第一版发的在编辑器里面直接能截图 结果发现提交 之后图没了我勒个去,然后图的地方就用代码代替了 无奈,看起来比较乱了就


关于使用EF-CodeFirst中多数据库使用 以及 自定义字符串的使用 +连接字符串加密调用

度娘好久都没有发现有资料能直接解决这3个问题的文章

这里就把自己摸索的经验给大家分享一下

不多说直接上代码

ef-cf=EntityFrameWork Code First


1,常规ef-cf引用之后 生成的代码以及config配置 丢出来,怎么生成的这个就自己找 很多

我这里是一个数据库对应一个对应-都是常规的 最后多个数据到一个web里面

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="WorkflowCenterContext" connectionString="Data Source=10.0.126.97;Initial Catalog=WorkflowCenter;Persist Security Info=True;User ID=sa;Password=K2pass!!;MultipleActiveResultSets=True"
      providerName="System.Data.SqlClient" />
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>
</configuration>



那么这个web里面的配置很简单 直接拷贝过来,然后在connectstrings里面add就好了 直接看代码

3个数据库的ef


<configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
      <section name="Zemt.Process.Web.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <connectionStrings>
    <add name="ZemtProcessContext" connectionString="FBD4EE7756F1E57E31DFB7208A1703E04A6090576F7561ADB44EBABC8B7ED52C87C77B1665C90ADD513C65DC53500F250B51D1BC8CDD4A76884EDD1023FEB55B0E570DD991C0C8334381EB7245594C72DCB8F0DE2D42125BDA18D5C79B1B06D16ECB27E380C391CB7AE3EE7F6A342E5DD638EB077035C5B7DBD0E050EB654EBEF30D4DF9DF8D83D970CD2406B40FD870"
     providerName="System.Data.SqlClient" />
    <add name="WorkflowCenterContext" connectionString="Data Sourcenitial Catalog=WorkflowCenter;Persist Security Info=True;User ID=sa;PasswoActiveResultSets=True"
      providerName="System.Data.SqlClient" />
    <add name="CapitaIntranetContext" connectionString="Data Source=;Initial Catalog=CapitaIntranet;Persist Security Info=True;User ID=sa;PctiveResultSets=True"
      providerName="System.Data.SqlClient" />
    <!--<add name="ZemtProcessContext" connectionString="Data Source=;Initial Catalog=ZemtProcess;Persist Security Info=True;User ID=k2sa;PasswpleActiveResultSets=True"
         providerName="System.Data.SqlClient" />
      <add name="WorkflowCenterContext" connectionString="Data Source=Initial Catalog=WorkflowCenter;Persist Security Info=True;User ID=k2sa;PasltipleActiveResultSets=True"
           providerName="System.Data.SqlClient" />
      <add name="CapitaIntranetContext" connectionString="Data Source=;Initial Catalog=CapitaIntranet;Persist Security Info=True;User ID=k2sa;PasspleActiveResultSets=True"
            providerName="System.Data.SqlClient" />-->
  </connectionStrings>


2,ef-cf里面自定义字符串问题

首先 上面来说 他已经自动生成web配置文件了,从代码中该不好下手

下面是自动生成的数据库代理类

using System.Data.Entity;
using System.Data.Entity.Infrastructure;


namespace Zemt.WorkflowCenter.DataBase
{
    public partial class WorkflowCenterContext : DbContext
    {
        static WorkflowCenterContext()
        {
            Database.SetInitializer<WorkflowCenterContext>(null);
        }


        public WorkflowCenterContext()
            : base("Name=WorkflowCenterContext")
        {
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {


        }
    }
}


当然之前木有看懂这个,所以觉得很难下手,最后看了资料 :base的意思 就是调用父类的构造函数,然后进去看base这函数的定义


 [SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
        [SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public DbContext(string nameOrConnectionString);

发现base可以直接传连接字符串进去,2种模式 直接传字符串或者传配置节点 也就是这里的name

 <connectionStrings>
    <add name="ZemtProcessContext" connectionString="FBD4EE7756F1E57E31DFB7208A1703E04A6090576F7561ADB44EBABC8B7ED52C87C77B1665C90ADD513C65DC53500F250B51D1BC8CDD4A76884EDD1023FEB55B0E570DD991C0C8334381EB7245594C72DCB8F0DE2D42125BDA18D5C79B1B06D16ECB27E380C391CB7AE3EE7F6A342E5DD638EB077035C5B7DBD0E050EB654EBEF30D4DF9DF8D83D970CD2406B40FD870"
     providerName="System.Data.SqlClient" />
    <add name="WorkflowCenterContext" connectionString="Data Sourcalog=WorkflowCenter;Persist Security Info=True;User ID=sa;PasswpleActiveResultSets=True"
      providerName="System.Data.SqlClient" />
    <add name="CapitaIntranetContext" connectionString="Data Souog=CapitaIntranet;Persist Security Info=True;User ID=sa;PaltipleActiveResultSets=True"
      providerName="System.Data.SqlClient" />


那么好说 改下就OK了


    public ZemtProcessContext()
            : base(CoreConfig.CoreConfigHelper.GetZemtProcessContextConnectString())
        {
        }


3,关于ef-cf中的配置文件加密 

看了1,2功能之后,加密也很简单,直接用一个加密类把字符串加密 然后再解密就好了 直接上图


 <add name="ZemtProcessContext" connectionString="FBD4EE7756F1E57E31DFB7208A1703E04A6090576F7561ADB44EBABC8B7ED52C87C77B1665C90ADD513C65DC53500F250B51D1BC8CDD4A76884EDD1023FEB55B0E570DD991C0C8334381EB7245594C72DCB8F0DE2D42125BDA18D5C79B1B06D16ECB27E380C391CB7AE3EE7F6A342E5DD638EB077035C5B7DBD0E050EB654EBEF30D4DF9DF8D83D970CD2406B40FD870"
     providerName="System.Data.SqlClient" />


然后解密调用


  public ZemtProcessContext()
            : base(CoreConfig.CoreConfigHelper.GetZemtProcessContextConnectString())
        {
        }

以上就是摸索2天+的成功



1 0
原创粉丝点击