百度双站和响应式网站的区别,网站为什么做等保,wordpress 瀑布,网站开发人才培养目标【Entity Framework】EF配置文件设置详解 文章目录 【Entity Framework】EF配置文件设置详解一、概述二、实体框架配置部分三、连接字符串四、EF数据库提供程序五、EF侦听器六、将数据库操作记录到文件中七、Code First默认连接工厂八、数据库初始值设定项 一、概述
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 version1.0 encodingutf-8?
configurationconfigSectionssection nameentityFrameworktypeSystem.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version4.3.0.0, Cultureneutral, PublicKeyTokenb77a5c561934e089 //configSections
/configuration三、连接字符串
连接字符串位于标准connectionStrings元素中不需要entityFramework部分。
基于 Code First 的模型使用常规 ADO.NET 连接字符串
connectionStringsadd nameBlogContext providerNameSystem.Data.SqlClient connectionStringServer.\SQLEXPRESS;DatabaseBlogging;Integrated SecurityTrue;/
/connectionStrings基于 EF 设计器的模型使用特殊的 EF 连接字符串
connectionStringsadd nameBlogContext connectionStringmetadatares://*/BloggingModel.csdl|res://*/BloggingModel.ssdl|res://*/BloggingModel.msl;providerSystem.Data.SqlClient;provider connection stringquot;data source(localdb)\mssqllocaldb;initial catalogBlogging;integrated securityTrue;multipleactiveresultsetsTrue;quot;providerNameSystem.Data.EntityClient /
/connectionStrings四、EF数据库提供程序
在 EF6 之前数据库提供程序的特定于实体框架的部分必须作为核心 ADO.NET 提供程序的一部分包含在内。 从 EF6 开始EF 特定部分现在单独管理和注册。
通常无需自行注册提供程序。 此操作通常会在安装时由提供程序完成。
通过在 entityFramework 部分的 providers 子部分下包含 provider 元素来注册提供程序。 提供程序条目有两个必需的属性
invariantName标识此 EF 提供程序面向的核心 ADO.NET 提供程序type是 EF 提供程序实现的程序集限定类型名称
在安装实体框架时为注册默认 SQL Server 提供程序而创建的条目实例如下
providersprovider invariantNameSystem.Data.SqlClient typeSystem.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer /
/providers程序集限定名称是命名空间限定名称后跟逗号然后是类型所在的程序集。 还可以选择指定程序集版本、区域性和公钥标记。 五、EF侦听器
从EF 6.1开始可以在配置文件中注册侦听器。通过侦听器可在EF执行某些操作时运行其他逻辑。
通过在 entityFramework 部分的 interceptors 子部分下包含 interceptor 元素来注册侦听器。 例如以下配置注册了内置的 DatabaseLogger 侦听器该侦听器将所有数据库操作记录到控制台。
interceptorsinterceptor typeSystem.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework/
/interceptors六、将数据库操作记录到文件中
如果要将日志记录添加到现有的应用程序以帮助调试问题则通过配置文件注册侦听器特别有用。 DatabaseLogger 通过提供文件名作为构造函数参数来支持记录到文件。
interceptorsinterceptor typeSystem.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFrameworkparametersparameter valueD:\EFLog\LogOutput.log//parameters/interceptor
/interceptors默认情况下这将导致每次应用启动时日志文件都被一个新文件覆盖。 要改为附加到日志文件如果它已经存在请使用以下操作
interceptorsinterceptor typeSystem.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFrameworkparametersparameter valueD:\EFLog\LogOutput.log/parameter valuetrue typeSystem.Boolean//parameters/interceptor
/interceptors七、Code First默认连接工厂
配置部分允许指定Code First应该使用默认连接工厂来定位要用于上下文的数据库。仅当未将连接字符串添加到上下文的配置文件时才使用默认连接工厂。
安装 EF NuGet 包时会注册一个指向 SQL Express 或 LocalDB 的默认连接工厂具体取决于你安装的连接工厂。
若要设置连接工厂请在 defaultConnectionFactory 元素中指定程序集限定类型名称。
以下是设置自己的默认连接工厂的示例
entityFrameworkdefaultConnectionFactory typeMyNamespace.MyCustomFactory, MyAssembly/
/entityFramework上面的示例要求自定义工厂具有无参数构造函数。 如果需要可以使用 parameters 元素指定构造函数参数。
示例包含在实体框架中的 SqlCeConnectionFactory 需要你向构造函数提供一个提供程序固定名称。 提供程序固定名称标识要使用的 SQL Compact 版本。 以下配置将导致上下文默认使用 SQL Compact 4.0 版。
entityFrameworkdefaultConnectionFactory typeSystem.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFrameworkparametersparameter valueSystem.Data.SqlServerCe.4.0 //parameters/defaultConnectionFactory
/entityFramework如果未设置默认连接工厂Code First 将使用指向 .\SQLEXPRESS 的 SqlConnectionFactory。 SqlConnectionFactory 也有一个构造函数允许你重写连接字符串的各个部分。 如果要使用 .\SQLEXPRESS 以外的 SQL Server 实例可以使用此构造函数来设置服务器。
以下配置将导致 Code First 将 MyDatabaseServer 用于未设置显式连接字符串的上下文。
entityFrameworkdefaultConnectionFactory typeSystem.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFrameworkparametersparameter valueData SourceMyDatabaseServer; Integrated SecurityTrue; MultipleActiveResultSetsTrue //parameters/defaultConnectionFactory
/entityFramework八、数据库初始值设定项
数据库初始值设定项按上下文进行配置。 可以使用 context 元素在配置文件中设置它们。 此元素使用程序集限定名称标识要配置的上下文。默认情况下Code First 上下文配置为使用 CreateDatabaseIfNotExists 初始值设定项。 context 元素上有一个 disableDatabaseInitialization 属性可用于禁用数据库初始化。
以下配置禁用 MyAssembly.dll 中定义的 Blogging.BlogContext 上下文的数据库初始化。
contextscontext type Blogging.BlogContext, MyAssembly disableDatabaseInitializationtrue /
/contexts可以使用 databaseInitializer 元素设置自定义初始值设定项
contextscontext type Blogging.BlogContext, MyAssemblydatabaseInitializer typeBlogging.MyCustomBlogInitializer, MyAssembly //context
/contexts构造函数参数使用与默认连接工厂相同的语法
contextscontext type Blogging.BlogContext, MyAssemblydatabaseInitializer typeBlogging.MyCustomBlogInitializer, MyAssemblyparametersparameter valueMyConstructorParameter //parameters/databaseInitializer/context
/contexts可以配置实体框架中包含的泛型数据库初始值设定项之一。 type 属性将 .NET Framework 格式用于泛型类型。
如果使用的是 Code First 迁移则可以使用 MigrateDatabaseToLatestVersionTContext, TMigrationsConfiguration 初始值设定项将数据库配置为自动迁移。
contextscontext typeBlogging.BlogContext, MyAssemblydatabaseInitializer typeSystem.Data.Entity.MigrateDatabaseToLatestVersion2[[Blogging.BlogContext, MyAssembly], [Blogging.Migrations.Configuration, MyAssembly]], EntityFramework //context
/contexts