【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.mzph.cn/news/797977.shtml

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

相关文章

OKR应用层级与试点部门选择:管理层与员工层的应用探讨

OKR&#xff08;Objectives and Key Results&#xff09;作为一种高效的目标管理工具&#xff0c;其应用层级的选择对于企业的实施效果至关重要。在管理层和员工层之间&#xff0c;并没有绝对的先后顺序&#xff0c;而是需要根据企业的具体情况和需求进行灵活应用。同时&#x…

python买铅笔 2024年3月青少年电子学会等级考试 中小学生python编程等级考试一级真题答案解析

目录 python买铅笔 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python买铅笔 2024年3月 python编程等级考试级编程题 一、题目要求 1、编…

【电路笔记】-逻辑非门

逻辑非门 文章目录 逻辑非门1、概述2、晶体管逻辑非门3、六角施密特反相器逻辑非门是所有逻辑门中最基本的,通常称为反相缓冲器或简称为反相器。 1、概述 反相非门是单输入器件,其输出电平通常为逻辑电平“1”,当其单个输入为逻辑电平“1”时,输出电平变为“低”至逻辑电平…

通用爬虫的概念简述

一、&#x1f308;什么是通用爬虫 通用爬虫&#xff08;General Purpose Web Crawler或Scalable Web Crawler&#xff09;是一种网络爬虫&#xff0c;其设计目标是对整个互联网或尽可能广泛的网络空间进行数据抓取。通用爬虫主要用于搜索引擎构建其庞大的网页索引数据库&#…

使用LIMIT进行分页

SELECT employee_id, first_name, salary FROM employees LIMIT 0, 5; 0为偏移量&#xff0c; 5为条目数 每页pageSize条记录&#xff0c;显示第page页 LIMIT (page - 1) * pageSize, pageSize; # 或者 LIMIT pageSize OFFSET (page - 1) * pageSize;

备战蓝桥杯---递归与DFS刷题2

1. 数据范围允许直接暴力把所有组合都写一遍&#xff0c;我们用Pair来存&#xff0c;在sort中分式比较只要把自己的分子与对方的分母乘比较即可&#xff0c;下面介绍一下st树的写法&#xff0c;具体原理就不说了&#xff0c;它是先[0/1,1/1]然后取分子分母的平均化成两个区间&a…

web学习笔记(五十三)身份认证

目录 1.Web 开发模式 1.1 服务端渲染的 Web 开发模式 1.2 服务端渲染的优缺点 1.3 前后端分离的 Web 开发模式 1.4 如何选择 Web 开发模式 2. 身份认证 2.1 Session 认证机制 3. 在 Express 中使用 Session 认证 3.1 安装express-session 中间件 3.2 配置 express-ses…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

智能变电站协议系列-5、IEC 104协议细化解读(IEC 60870以及如何获取对应国标和行标)

一、前言 通过之前整体性的协议分析&#xff0c;目前确定先基于IEC104做深入分析&#xff0c;来结合分析电网常见的业务&#xff0c;以此从协议侧关联深入到业务侧。在国内该标准也应用比较稳定和广泛了&#xff0c;所以研究104协议相关资料也会更全一些。 二、资料及标准收集…

【强化学习的数学原理-赵世钰】课程笔记(二)贝尔曼公式

【强化学习的数学原理-赵世钰】课程笔记&#xff08;二&#xff09;贝尔曼公式 一. 内容概述 1. 第二章主要有两个内容 &#xff08;1&#xff09;一个核心概念&#xff1a;状态值&#xff08;state value&#xff09;&#xff1a;从一个状态出发&#xff0c;沿着一个策略我…

OWASP TOP10 漏洞详解

前言 该内容是 OWASP TOP 10 的学习笔记&#xff0c;笔记内容来源 B 站龙哥的视频【12.Top漏洞10&#xff1a;服务器请求伪造_哔哩哔哩_bilibili】 一、访问控制崩溃 概念 未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据&#xf…

QA测试开发工程师面试题满分问答9: Python中内存管理的概念、原理、使用

概念原理 Python中的内存管理是由解释器自动处理的&#xff0c;它使用引用计数和垃圾回收机制来管理内存。以下是Python内存管理的一些关键概念、设计原理和最佳实践&#xff0c;以帮助您高效使用和管理内存&#xff1a; 引用计数&#xff1a;Python使用引用计数来追踪对象的引…

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现(前后端分类)

一、项目背景介绍&#xff1a; 在当今社会&#xff0c;图书捐赠是一种普遍而有益的行为&#xff0c;旨在促进阅读、教育和知识传播。图书捐赠可以帮助改善教育资源不足的地区、学校和社区的阅读环境&#xff0c;提供更多的学习机会和知识获取途径。随着互联网和移动技术的发展&…

Redis-更新策略,缓存穿透,缓存雪崩,缓存击穿

Redis-更新策略,缓存穿透,缓存雪崩,缓存击穿 1.缓存更新 策略 淘汰策略超时剔除主动更新 更新策略&#xff1a;先修改数据库还是先删除缓存 结论&#xff1a;先修改数据库&#xff0c;因为缓存的操作比较快&#xff0c;容易产生数据不一致更新缓存还是删除缓存&#xff1f; …

网络协议——HTTP协议

目录 ​编辑 一&#xff0c;HTTP协议基本认识 二&#xff0c;认识URL 三&#xff0c;http协议的格式 1&#xff0c;发送格式 2&#xff0c;回应格式 四&#xff0c;服务端代码 五&#xff0c;http报文细节 1&#xff0c;Post与Get方法 2&#xff0c;Content_lenth 3&…

html加载后端数据较慢问题记载

标题: html加载后端数据较慢问题记载 日期: 2024-04-06 22:29:00 标签: [html, flask] 分类: [Python, Flask] 网站页面最近加载很慢&#xff0c;不知道为什么&#xff0c;这里记录一下&#xff0c;一步一步查问题的思路。 说下环境 python3.8 flask2.3.3 mysql5.7 问题 刷…

爬虫实战一、Scrapy开发环境(Win10+Anaconda3)搭建

#前言 在这儿推荐使用Anaconda进行安装&#xff0c;并不推荐大家用pythonpip安装&#xff0c;因为pythonpip的坑实在是太多了。 #一、环境中准备&#xff1a; Win10&#xff08;企业版&#xff09;Anaconda3-5.0.1-Windows-x86_64&#xff0c;下载地址&#xff0c;如果打不开…

每日OJ题_两个数组dp①_力扣1143. 最长公共子序列

目录 力扣1143. 最长公共子序列 解析代码 力扣1143. 最长公共子序列 1143. 最长公共子序列 难度 中等 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样…

尚硅谷html5+css3(2)CSS5基本知识

1.网页分为三个部分&#xff1a; 结构&#xff1a;HTML 表现&#xff1a;CSS 行为JavaScript CSS:层叠样式表&#xff0c;网页实际上是一个多层结构&#xff0c;通过CSS可以分别为网页的每一个层来设置样式&#xff0c;最终用户只看最上面的一层&#xff0c;总之&#xff0…