SQL ServerASP.NET没有魔法——ASP.NET MVC 与数据库的EntityFramework配置与连接字符串

  前几乎首稿子中牵线了什么样以Entity
Framework来操作数据库,但是针对EF的部署、连接字符串的指定仍然存在部分狐疑,EF可以透过简单种植办法来促成配置,分别是代码方式以及安排文件。
  本章将经过以下几点对EF的安排进行介绍:

  ●Entity Framework的部署文件
  ●EntityFramework节点解析
  ●关于ConnectionString
  ●使用代码方式修改配置
  ●根据实际要求选择切合之配置方式

Entity Framework的配备文件

  对于配置文件来说,在安装Entity
Framework的当儿以会见自动在配置文件被插以下内容:

  SQL Server 1  

  首先是ConfigSection:
  ConfigSection是.Net程序用自定义配置节点的节点,所以是节点的来意是告诉.Net程序来一个自定义的安排节点,自定义节点的名目和类型是呀。
  名称特别好明就是是属下的entityFramework节点,但是项目因的凡呀吧?
  类型因的凡用来拍卖名称所因配置信息之处理器,下面代码是地方配置的节点类型定义:

  SQL Server 2

  里面的始末及安排文件是起提到的,如何由定义配置节点可参看:https://msdn.microsoft.com/en-us/library/2tw134k3.aspx 

EntityFramework节点解析

  EntityFramework节点下要有providers、interceptors、contexts、defaultConnectionFactory,基本上跟EntityFrameworkSection类型是相应之。

  1. providers:

  根据项目EntityFrameworkSection定义来拘禁,providers是一个provider的集聚,而各一个provider的布局分别欲provider的称谓(不转换的用来做标识)、类型(提供器所于的命名空间与程序集)。以下是默认的SqlServer提供器:

  SQL Server 3

  2. interceptors:

  拦截器,也是一个列表,每一个interceptors提供项目(命名空间及顺序集名称)以及对应的参数来好布置,以下是EF自带的日志拦截器。

  SQL Server 4

  以下是在日志拦截器的运作效果:

  SQL Server 5

  注:所谓拦截器是一模一样种植面向切面(AOP)的编程方式,是千篇一律种不修改源代码的前提下本着应用程序进行拓展之编程方式。一般AOP用来拍卖日志记录、性能统计、安全控制、事务处理、异常处理等不见面针对本来业务数据开展改动的效能。

  3. contexts:

  contexts节点下可存在多单context节点,该节点用于数据库初始化,默认情况下DbContext在初始化的时刻如果没有数据库会活动创建。如果未需要可以在布置文件被投入如下配置禁用:

  SQL Server 6

  可以下databaseInitializer元素来装数据库从定义初始化(以下是合法文档例子):

  SQL Server 7

  或者数据库的全自动迁移(官方文档例子):

  SQL Server 8

  4. defaultConnectionFactory

  defaultConnectionFactory会指定一个默认的连接工厂,这个连续工厂当使用代码优先的时光去摸索一个数据库让DbContext使用(注:当DbContext未在数据库连接字符串的上才见面收效)。
  当通过Nuget来安装EF包的时刻会基于本机情况来注册一个默认的ConnectionFactory,SQL
Express或者LocalDb(注:所以说一个新建的MVC带身份验证的模版项目产生数量存储机制,这个机制就算可能是起SQL
Express或者LocalDb来贯彻的)。以下配置就是因LocalDb的,主要发生Factory类型和参数

  SQL Server 9

   如果无装defaultConnectionFactory那么默认将下SqlConnectionFactory(注:所以在尚未配置的事态下则运用SQL
Server数据库)。

  SqlConnectionFactory也堪在defaultConnectionFactory中布置,它可经参数来指定一个接连字符串,这样就算无欲连接字符串了:

  SQL Server 10

关于ConnectionString

  关于ConnectionString上面介绍了defaultConnectionFactory是免有数据库连接字符串的早晚才生效,那么数据库连接字符串要怎样处理也?DbContext又怎么样来判定连字符串是否在?以下就是连连字符串选择的逻辑:
  1. 当没有安排外连接字符串(包括默认连接工厂和ConnectionString节点),DbContext使用无参构造方法时,DbContext将默认使用DbContext所于命名空间及DbContext类型名称来作数据库名称(如本例中以见面是:BlogRepository.BlogDbContext),然后创建一个连至SQL
Express或LocalDb数据库连接前者优先采取。
  注:SQL
Express和LocalDb都好当作是SQL Server数据库的开发者使用本。
  2. 以DbContext的构造方法中指定数据库名称(注意要以基类型的结构中指定),那么以运用指定的名,然后创建一个总是到SQL
Express或LocalDb数据库连接前者优先采取。

  3. 在DbContext的构造方法中指定数据库连接字符串(注意要于基类型的结构中指定),那么将采取该字符串,并且默认使用System.Data.SqlClient作为提供器,即由此这种方法指定连接字符串默认使用SQL
Server,如果如使另外数据库需要变更context.Database.DefaultConnectionFactory的设置。
  4. 在web.config/app.config文件中布置了连续字符串后,如果DbContext的门类名称及连接字符的name属性相同(无论是否包含全命名空间)或者当基类构造方法中指定了连续字符串的名称,那么还拿采取此布局信息来当连续字符串。
  详情参见:https://msdn.microsoft.com/en-us/library/jj592674(v=vs.113).aspx

使代码方式修改配置

  以上要是对准EF中的提供器provider、拦截器interceptor、默认连接工厂defaultConnectionFactory以及数据库初始化Context的配备进行了介绍,对于这些情节都可经代码的点子来好布局,但若留意的是代码的布局会被安排文件的布局覆盖,如果同配置在代码和配备文件被,那么配置文件之见效。
  1. 定义一个类继承至System.Data.Entity.DbConfiguration。
  2. 也该品种创建一个无参公共构造方法。
  3. 当构造方法中调用一多样保护方法就布局。

  SQL Server 11

  4. 每当DbContext类型上行使DbConfigurationType特性:

  SQL Server 12

  注:此处的连字符串数据库名称需要经DbContext基类传入,否则用{命名空间.DbContext}名称作为数据库名。

  5. 去除所有与EF相关的布置然后运行程序:

  SQL Server 13

根据实际需要选择适合之配备方式

  于本例中坐在多只数据库解决方案,所以会见有多模拟配置,而且它们都并用同一个MVC程序,所以每次切换数据库时要将安排文件在web.config中都得修改相应的EF配置,所以当尽可能将不易变的部署写以程序中。
  对于拦截器应该写以布置文件被,因为其恐怕会见随便的受长和去。
  其次数据库连接字符串是会见常常改变的,比如环境变迁、数据库账号密码变更等,所以也应放在配置文件被。
  根据上述剖析对My Blog程序修改如下:
  1. 每当安排型中定义provider:

  SQL Server 14

   2. 在web.config文件中加入EF配置,但特配备拦截器:

  SQL Server 15

  3. 加上数据库连接字符串:

  SQL Server 16

  4. 每当DbContext类型上运用DbConfigurationType特性:

  SQL Server 17

  5. 运行结果:

  SQL Server 18

小结

  本章主要是介绍了EF的部署,分别就此配备文件与代码的计实现了EF配置,当用代码配置时,MVC项目不再需要进入任何EF配置即可运行应用程序。了解配置文件有利于了解EF的运行机制,也造福将数据库变更至MySQL。
  在微软文档中有这样同样句话:
  Entity Framework allows a number of settings to be specified from
the configuration file. In general EF follows a ‘convention over
configuration’ principle. All the settings discussed in this post have a
default behavior, you only need to worry about changing the setting when
the default no longer satisfies your requirements.
  意思是说EF遵循约定优先安排规格,所有的配备都发出默认的所作所为,一般如果没突出需要不需修改配置。

参考:

  https://msdn.microsoft.com/en-us/library/jj556606(v=vs.113).aspx
  https://msdn.microsoft.com/en-us/library/jj680699(v=vs.113).aspx
  https://msdn.microsoft.com/en-us/library/jj592674(v=vs.113).aspx

本文连接:http://www.cnblogs.com/selimsong/p/7655949.html 

 ASP.NET没有魔法——目录

相关文章