当前位置:首页 > 话题广场 > 攻略专题 > 游戏问答

ASP.NET开发实战——(十一)数据库之EF配置与连接字符串

(9500.163.com) 前几篇文章中介绍了如何使用Entity Framework来操作数据库,但是对EF的配置、连接字符串的指定仍然存在一些疑问,EF可以通过两种方式来实现配置,分别是代码方式和配置文件。 达到当天最大量API KEY 超过次数限制

本章将通过以下几点对EF的配置进行介绍:

●Entity Framework的配置文件

●EntityFramework节点解析

●关于ConnectionString

●使用代码方式修改配置

●根据实际需求选择适合的配置方式

Entity Framework的配置文件

对于配置文件来说,在安装Entity Framework的时候将会自动在配置文件中插入以下内容:

首先是ConfigSection:

ConfigSection是.Net程序用来自定义配置节点的节点,所以这个节点的作用是告诉.Net程序有一个自定义的配置节点,自定义节点的名称和类型是什么。

名称很好理解就是接下来的entityFramework节点,但是类型指的是什么呢?

类型指的是用于处理名称所指配置信息的处理器,下面代码是上面配置的节点类型定义:

里面的内容与配置文件是有关联的,如何自定义配置节点可参考:

EntityFramework节点解析

EntityFramework节点下主要有providers、interceptors、contexts、defaultConnectionFactory,基本上与EntityFrameworkSection类型是对应的。

1. providers:

根据类型EntityFrameworkSection定义来看,providers是一个provider的集合,而每一个provider的配置分别需要provider的名称(不变的用于做标识)、类型(提供器所在的命名空间和程序集)。以下是默认的SQLServer提供器:

2. interceptors:

拦截器,也是一个列表,每一个interceptors提供类型(命名空间和程序集名称)以及相应的参数来完成配置,以下是EF自带的日志拦截器。

以下是加入日志拦截器的运行效果:

注:所谓拦截器是一种面向切面(AOP)的编程方式,是一种不修改源代码的前提下对应用程序进行拓展的编程方式。一般AOP用来处理日志记录、性能统计、安全控制、事务处理、异常处理等不会对原有业务数据进行修改的功能。

3. contexts:

contexts节点下可以存在多个context节点,该节点用于数据库初始化,默认情况下DbContext在初始化的时候如果没有数据库会自动创建。如果不需要可以在配置文件中加入如下配置禁用:

可以使用databaseInitializer元素来设置数据库自定义初始化(以下是官方文档例子):

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

4. defaultConnectionFactory

defaultConnectionFactory会指定一个默认的连接工厂,这个连接工厂当使用代码优先的时候去查找一个数据库给DbContext使用(注:当DbContext不存在数据库连接字符串的时候才会生效)。

当通过Nuget来安装EF包的时候会根据本机情况来注册一个默认的ConnectionFactory,SQL Express或者LocalDb(注:所以说一个新建的MVC带身份验证的模板项目有数据存储机制,这个机制就可能是有SQL Express或者LocalDb来实现的)。以下配置就是基于LocalDb的,主要有Factory类型和参数

如果没有设置defaultConnectionFactory那么默认将使用SqlConnectionFactory(注:所以在没有配置的情况下则使用SQL Server数据库)。

SqlConnectionFactory也可以在defaultConnectionFactory中配置,它可以通过参数来指定一个连接字符串,这样就不需要连接字符串了:

关于ConnectionString

关于ConnectionString上面介绍了defaultConnectionFactory是不存在数据库连接字符串的时候才生效,那么数据库连接字符串要如何处理呢?DbContext又如何来判断连接字符串是否存在?以下就是连接字符串选择的逻辑:

1. 当没有配置任何连接字符串(包括默认连接工厂和ConnectionString节点),DbContext使用无参构造方法时,DbContext将默认使用DbContext所在命名空间和DbContext类型名称来作为数据库名称(如本例中将会是:BlogRe),然后创建一个连接到SQL Express或LocalDb数据库连接前者优先使用。

注:SQL Express和LocalDb都可以看作是SQL Server数据库的开发者使用版本。

2. 在DbContext的构造方法中指定数据库名称(注意必须在基类型的构造中指定),那么将使用指定的名称,然后创建一个连接到SQL Express或LocalDb数据库连接前者优先使用。

3. 在DbContext的构造方法中指定数据库连接字符串(注意必须在基类型的构造中指定),那么将使用该字符串,并且默认使用Sy作为提供器,即通过这种方式指定连接字符串默认使用SQL Server,如果要使用其它数据库需要更改con的设置。

4. 在web.config文件中配置了连接字符串后,如果DbContext的类型名称与连接字符的name属性相同(无论是否包含全命名空间)或者在基类构造方法中指定了连接字符串的名称,那么都将使用这个配置信息来作为连接字符串。

详情参考:(v=vs.113).aspx

使用代码方式修改配置

以上主要是对EF中的提供器provider、拦截器interceptor、默认连接工厂defaultConnectionFactory以及数据库初始化Context的配置进行了介绍,对于这些内容都可以通过代码的方式来完成配置,但要注意的是代码的配置会被配置文件的配置覆盖,如果相同配置存在代码和配置文件中,那么配置文件的生效。

1. 定义一个类型继承至Sy。

2. 为该类型创建一个无参公共构造方法。

3. 在构造方法中调用一系列保护方法完成配置。

4. 在DbContext类型上使用DbConfigurationType特性:

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

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

根据实际需求选择适合的配置方式

在本例中因为存在多个数据库解决方案,所以会存在多套配置,而且它们都共用同一个MVC程序,所以每次切换数据库时如果把配置文件放在web.config中都需要修改相应的EF配置,所以应该尽量把不易变的配置写在程序中。

对于拦截器应该写在配置文件中,因为它可能会随意的被添加和删除。

其次数据库连接字符串是会经常改变的,比如环境变化、数据库账号密码变更等,所以也应该放在配置文件中。

根据以上分析对My Blog程序修改如下:

1. 在配置类型中定义provider:

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

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

4. 在DbContext类型上使用DbConfigurationType特性:

5. 运行结果:

小结

本章主要是介绍了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遵循约定优先配置原则,所有的配置都有默认的行为,一般如果没有特殊需求不需要修改配置。

欢迎添加个人微信号:Like若所思。

欢迎关注我的公众号,不仅为你推荐最新的博文,还有更多惊喜和资源在等着你!一起学习共同进步!

1.《ASP.NET开发实战——(十一)数据库之EF配置与连接字符串》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《ASP.NET开发实战——(十一)数据库之EF配置与连接字符串》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/gl/2097896.html

上一篇

03版excel怎么冻结窗口?我来告诉你答案一篇文章,教你学会Excel中的冻结窗格功能

下一篇

0PP0r7手机内存怎么设置看这里!最高可「提升」7GB,OPPO Find X2用上内存扩展技术

.net如何连接数据库?我来告诉你答案aspnet数据库连接mssql配置(基础入门6)

.net如何连接数据库?我来告诉你答案aspnet数据库连接mssql配置(基础入门6)

.net如何连接数据库相关介绍,内容回顾 在前两讲中,我们讲到了连接数据库,并向数据库插入数据,我们在应用程序开发中,数据库的操作必不可少,在B/S架构的程序中,大部分程序都是面向数据库的开发,对数据库进行增加、修改、删除、查询等操...

.net如何连接数据库看这里!走进NoSQL开源数据库!FastReport.Net报表设计器可连接NosDB

.net如何连接数据库看这里!走进NoSQL开源数据库!FastReport.Net报表设计器可连接NosDB

.net如何连接数据库相关介绍,NosDB是NoSQL数据库的杰出代表。专为Net平台设计,有开源。 像许多其他非关系数据库一样,NosDb具有很快的速度和良好的线性可伸缩性。在本文中,我们将探讨使用设计器插件在报表内连接NosDb...

.net如何连接数据库看这里!「FastCube.Net教程」如何将数据库连接到多维数据集

.net如何连接数据库看这里!「FastCube.Net教程」如何将数据库连接到多维数据集

.net如何连接数据库相关介绍,通常,OLAP多维数据集中的数据是从数据库加载的。要使用数据填充多维数据集,需要创建数据源,多维数据集可以接收以下数据: Database(数据库)—创建与数据库的连接;Stream(流)—可以通过网...

.net如何连接数据库连接池?终于找到答案了还不懂数据库连接池的原理?看这篇文章啊

.net如何连接数据库连接池?终于找到答案了还不懂数据库连接池的原理?看这篇文章啊

.net如何连接数据库连接池相关介绍,作者:邓格 原文: 这次我们对数据库连接池的技术出现过程和原理,以及当前最受欢迎的开源数据库连接池jar数据包采取技术进化的方式。 一.早期我们怎么进行数据库操作 1.原理:一般来说,java应用程序...

.net如何连接数据库?总结很全面速看!「FastCube.Net教程」如何将数据库连接到多维数据集

.net如何连接数据库?总结很全面速看!「FastCube.Net教程」如何将数据库连接到多维数据集

.net如何连接数据库相关介绍,通常,从数据库加载OLAP立方中的数据。要用数据填充立方,必须创建可接收以下数据的数据源: Database(数据库)-创建与数据库的连接。流(Stream)-可以通过网络以流形式接收、从文件打开或从...

.net如何连接数据库连接池?总结很全面速看!ado.net连接池

.net如何连接数据库连接池?总结很全面速看!ado.net连接池

.net如何连接数据库连接池相关介绍,ADO.net连接池 由来:建立数据库连接是一项耗时的(耗时的)消耗力(资源消耗),连接池可以在一定程度上解决这个问题,提高应用程序性能。 ado.net 连接池原理: 一个连接池对应一个连接字符串,...

.net如何连接数据库连接池?终于找到答案了SQLServer高级连接-ADO.NET调用存储过程连接池

.net如何连接数据库连接池?终于找到答案了SQLServer高级连接-ADO.NET调用存储过程连接池

.net如何连接数据库连接池相关介绍,网站防火墙 网站防火墙 您的请求带有不合法参数,已被网站管理员设置拦截! 可能原因:您提交的内容包含危险的攻击请求 如何解决: 1)检查提交内容; 2)如网站托管,请联系空间提供商; 3)普通网站访客...

.net如何连接数据库?总结很全面速看!SQLServer高级连接-ADO.NET调用存储过程连接池

.net如何连接数据库?总结很全面速看!SQLServer高级连接-ADO.NET调用存储过程连接池

.net如何连接数据库相关介绍,网站防火墙 网站防火墙 您的请求带有不合法参数,已被网站管理员设置拦截! 可能原因:您提交的内容包含危险的攻击请求 如何解决: 1)检查提交内容; 2)如网站托管,请联系空间提供商; 3)普通网站访客...