【Entity Framework】EF配置文件设置详解

【Entity Framework】EF配置文件设置详解

在这里插入图片描述

文章目录

  • 【Entity Framework】EF配置文件设置详解
    • 一、概述
    • 二、实体框架配置部分
    • 三、连接字符串
    • 四、EF数据库提供程序
    • 五、EF侦听器
    • 六、将数据库操作记录到文件中
    • 七、Code First默认连接工厂
    • 八、数据库初始值设定项

一、概述

EF实体框架允许在配置文件中指定多个设置。一般来说,EF遵循"约定优于配置"的原则;从EF6开始,引入代码配置,在【Entity Framework】EF配置之代码配置详解 一文详解介绍,代码配置提供了一种代码应用配置的重要的方式。仍然可以从代码应用配置,但需要使用各种 API 来配置不同的区域。 借助配置文件选项可在部署期间轻松更改这些设置,而无需更新代码。

二、实体框架配置部分

从EF4.1开始,可以使用配置文件的appSettings部分为上下文设置数据库初始值设置项。在EF 4.3中,我们引入了自定义entityFramework部分来处理新设置。实体框架仍将识别使用旧格式设置的数据库初始值设定项,但建议尽可能改用新格式。

安装 EntityFramework NuGet 包时,entityFramework 部分会自动添加到项目的配置文件中。

<?xml version="1.0" encoding="utf-8"?>
<configuration><configSections><section name="entityFramework"type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /></configSections>
</configuration>

三、连接字符串

连接字符串位于标准connectionStrings元素中,不需要entityFramework部分。

  • 基于 Code First 的模型使用常规 ADO.NET 连接字符串
<connectionStrings><add name="BlogContext"  providerName="System.Data.SqlClient"  connectionString="Server=.\SQLEXPRESS;Database=Blogging;Integrated Security=True;"/>
</connectionStrings>
  • 基于 EF 设计器的模型使用特殊的 EF 连接字符串
<connectionStrings><add name="BlogContext"  connectionString="metadata=res://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(localdb)\mssqllocaldb;initial catalog=Blogging;integrated security=True;multipleactiveresultsets=True;&quot;"providerName="System.Data.EntityClient" />
</connectionStrings>

四、EF数据库提供程序

在 EF6 之前,数据库提供程序的特定于实体框架的部分必须作为核心 ADO.NET 提供程序的一部分包含在内。 从 EF6 开始,EF 特定部分现在单独管理和注册。

通常无需自行注册提供程序。 此操作通常会在安装时由提供程序完成。

通过在 entityFramework 部分的 providers 子部分下包含 provider 元素来注册提供程序。 提供程序条目有两个必需的属性:

  • invariantName,标识此 EF 提供程序面向的核心 ADO.NET 提供程序
  • type,是 EF 提供程序实现的程序集限定类型名称

在安装实体框架时为注册默认 SQL Server 提供程序而创建的条目,实例如下:

<providers><provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>

程序集限定名称是命名空间限定名称,后跟逗号,然后是类型所在的程序集。 还可以选择指定程序集版本、区域性和公钥标记。

五、EF侦听器

从EF 6.1开始,可以在配置文件中注册侦听器。通过侦听器可在EF执行某些操作时运行其他逻辑。

通过在 entityFramework 部分的 interceptors 子部分下包含 interceptor 元素来注册侦听器。 例如,以下配置注册了内置的 DatabaseLogger 侦听器,该侦听器将所有数据库操作记录到控制台。

<interceptors><interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"/>
</interceptors>

六、将数据库操作记录到文件中

如果要将日志记录添加到现有的应用程序以帮助调试问题,则通过配置文件注册侦听器特别有用。 DatabaseLogger 通过提供文件名作为构造函数参数来支持记录到文件。

<interceptors><interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"><parameters><parameter value="D:\EFLog\LogOutput.log"/></parameters></interceptor>
</interceptors>

默认情况下,这将导致每次应用启动时日志文件都被一个新文件覆盖。 要改为附加到日志文件(如果它已经存在),请使用以下操作:

<interceptors><interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework"><parameters><parameter value="D:\EFLog\LogOutput.log"/><parameter value="true" type="System.Boolean"/></parameters></interceptor>
</interceptors>

七、Code First默认连接工厂

配置部分允许指定Code First应该使用默认连接工厂来定位要用于上下文的数据库。仅当未将连接字符串添加到上下文的配置文件时,才使用默认连接工厂。

安装 EF NuGet 包时,会注册一个指向 SQL Express 或 LocalDB 的默认连接工厂,具体取决于你安装的连接工厂。

若要设置连接工厂,请在 defaultConnectionFactory 元素中指定程序集限定类型名称。

以下是设置自己的默认连接工厂的示例:

<entityFramework><defaultConnectionFactory type="MyNamespace.MyCustomFactory, MyAssembly"/>
</entityFramework>

上面的示例要求自定义工厂具有无参数构造函数。 如果需要,可以使用 parameters 元素指定构造函数参数。

示例,包含在实体框架中的 SqlCeConnectionFactory 需要你向构造函数提供一个提供程序固定名称。 提供程序固定名称标识要使用的 SQL Compact 版本。 以下配置将导致上下文默认使用 SQL Compact 4.0 版。

<entityFramework><defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework"><parameters><parameter value="System.Data.SqlServerCe.4.0" /></parameters></defaultConnectionFactory>
</entityFramework>

如果未设置默认连接工厂,Code First 将使用指向 .\SQLEXPRESS 的 SqlConnectionFactory。 SqlConnectionFactory 也有一个构造函数,允许你重写连接字符串的各个部分。 如果要使用 .\SQLEXPRESS 以外的 SQL Server 实例,可以使用此构造函数来设置服务器。

以下配置将导致 Code First 将 MyDatabaseServer 用于未设置显式连接字符串的上下文。

<entityFramework><defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"><parameters><parameter value="Data Source=MyDatabaseServer; Integrated Security=True; MultipleActiveResultSets=True" /></parameters></defaultConnectionFactory>
</entityFramework>

八、数据库初始值设定项

数据库初始值设定项按上下文进行配置。 可以使用 context 元素在配置文件中设置它们。 此元素使用程序集限定名称标识要配置的上下文。默认情况下,Code First 上下文配置为使用 CreateDatabaseIfNotExists 初始值设定项。 context 元素上有一个 disableDatabaseInitialization 属性,可用于禁用数据库初始化。

以下配置禁用 MyAssembly.dll 中定义的 Blogging.BlogContext 上下文的数据库初始化。

<contexts><context type=" Blogging.BlogContext, MyAssembly" disableDatabaseInitialization="true" />
</contexts>

可以使用 databaseInitializer 元素设置自定义初始值设定项

<contexts><context type=" Blogging.BlogContext, MyAssembly"><databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly" /></context>
</contexts>

构造函数参数使用与默认连接工厂相同的语法

<contexts><context type=" Blogging.BlogContext, MyAssembly"><databaseInitializer type="Blogging.MyCustomBlogInitializer, MyAssembly"><parameters><parameter value="MyConstructorParameter" /></parameters></databaseInitializer></context>
</contexts>

可以配置实体框架中包含的泛型数据库初始值设定项之一。 type 属性将 .NET Framework 格式用于泛型类型。

如果使用的是 Code First 迁移,则可以使用 MigrateDatabaseToLatestVersion<TContext, TMigrationsConfiguration> 初始值设定项将数据库配置为自动迁移。

<contexts><context type="Blogging.BlogContext, MyAssembly"><databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[Blogging.BlogContext, MyAssembly], [Blogging.Migrations.Configuration, MyAssembly]], EntityFramework" /></context>
</contexts>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/598334.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣热题100_链表_138_随机链表的复制

文章目录 题目链接解题思路解题代码 题目链接 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&a…

《追风者》中爷叔必读的三大创业金句!2024最受欢迎的创业项目,2024新兴创业项目

作为爱奇艺2024首部破万的长剧《追风者》&#xff0c;正是因为其中蕴含了无数的人生哲理&#xff0c;处世之道可以供观众细细品味。尤其是其中爷叔的创业金句&#xff0c;更是给了每个初次创业的受挫者鼓励和指引。 1、不输&#xff0c;就是赢了。不比谁赚得多&#xff0c;不比…

元宇宙虚拟空间的角色初始化(六)

前言 该文章主要讲元宇宙虚拟空间的角色初始化&#xff0c;基本核心技术点&#xff0c;不多说&#xff0c;直接引入正题。 角色初始化 在调用渲染前&#xff0c;打印一下更新的列表 console.log(this.updatables); this.render(this);; 这里看到有很多要更新的 这…

java流式计算Stream

java流式计算Stream 流(Stream)到底是什么呢? 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 “集合讲的是数据&#xff0c;流讲的是计算! ” 特点&#xff1a; Stream自己不会存储元素。 Stream不会改变源对象。相反&#x…

职场必修经验:一位测试大神的软件测试工作经验总结

这篇文章&#xff0c;整理下测试工作经验分享 最近&#xff0c;部门刚毕业入职的小伙伴跟大家提议&#xff0c;让大家把自己的软件测试工作经验分享一下&#xff0c;我整理了一下&#xff0c;可能不全。 测试阶段划分 1、 单个模块功能测试时间相对较长&#xff0c;但每一个…

带头双向循环链表实现

1.结构及特性 前面我们实现了无头单向非循环链表&#xff0c;它的结构是这样的&#xff1a; 在这里的head只是一个指向头结点的指针&#xff0c;而不是带头链表的头节点。 而带头双向循环链表的逻辑结构则是这样的 这就是链表的结构&#xff0c;链表的每一个节点都有两个指针…

ROS 2边学边练(15)-- 写一个简单的服务(C++)

前言 此篇我们即将编写一个简单的服务&#xff08;service&#xff09;通信例子&#xff0c;客户端节点向服务端节点发出请求&#xff08;.srv文件中规定了通信的数据结构格式&#xff09;&#xff0c;服务端节点收到请求后将结果回复给客户端节点&#xff0c;一问一答&#xf…

修电机所需要的基本工具

等距式 模具 同心式模具 电机划线刀 压脚 千分尺 -----测量线径 钳形电流表------- 测量 空载 满载下的电流值 摇表&#xff0c; 测量线圈是否碰到外壳 指针式万用表 胶锤 整理线圈 绝缘纸和青稞纸&#xf…

[StartingPoint][Tier1]Funnel

Task 1 How many TCP ports are open? (打开了多少个 TCP 端口&#xff1f;) # nmap -sS -T4 10.129.224.226 --min-rate 1000 2 Task 2 What is the name of the directory that is available on the FTP server? (FTP 服务器上可用的目录名称是什么&#xff1f;) $ n…

什么是商家转账到零钱

商家转账到零钱是什么&#xff1f; 通过商家转账到零钱这个功能&#xff0c;如果我们系统需要对用户支付费用&#xff0c;比如发放佣金、提成、退款之类的&#xff0c;可以直接转账到用户的微信零钱。 【商家转账到零钱】是【企业付款到零钱】的升级版&#xff0c;2022年5月1…

Java 面试宝典:Redis 的线程模型是怎么样的?

大家好&#xff0c;我是大明哥&#xff0c;一个专注「死磕 Java」系列创作的硬核程序员。 本文已收录到我的技术网站&#xff1a;https://www.skjava.com。有全网最优质的系列文章、Java 全栈技术文档以及大厂完整面经 Redis 的线程模型其实是分两块的&#xff1a; Redis 6.0 …

10个程序员可以接私活的平台和一些建议

话不多说&#xff0c;直接进入正题。我把我压箱底的10个程序员接私活的平台都拿出来了&#xff0c;看之前记得先点赞收藏~ 码市 互联网网站外包服务平台&#xff0c;这个平台上还有产品原型可供参考。在码市上有一系列规范的接单和发单流程答疑过程&#xff0c;可以很好地帮助…