实体框架配置节

实体框架允许从配置文件指定大量设置。一般来说,EF 遵循“约定先于配置”的原则。本文讨论的所有设置都有默认行为,您只需负责在默认值不再能够满足需求时更改设置。

所有这些设置都可以使用代码来应用。配置文件选项可用于在部署期间轻松更改这些设置,而无需更新代码。

 

实体框架配置节

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

当您安装 EntityFramework NuGet 包时,entityFramework 一节已自动添加到项目的配置文件中。

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
  <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <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)\v11.0
                                               initial catalog=Blogging; 
                                               integrated security=True; 
                                               multipleactiveresultsets=True;&quot;" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings>

 

Code First 默认连接工厂

该配置节允许您指定 Code First 用来查找要用于上下文的数据库的默认连接工厂。仅在没有为上下文在配置文件中添加连接字符串时,才会用到默认连接工厂。

当您安装 EF NuGet 包时,已注册一个指向 SQL Express 或 LocalDb(取决于您安装的数据库产品)的默认连接工厂。

要设置连接工厂,请在 deafultConnectionFactory 元素中指定程序集限定类型名。
注意:程序集限定名是命名空间限定名,后跟一个逗号,然后是该类型所在的程序集。您还可以选择指定程序集版本、区域性和公钥令牌。

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

<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 也有一个可用来覆盖连接字符串部分的构造函数。如果想使用 SQL Server 实例而不是 .\SQLEXPRESS,可使用此构造函数来设置服务器。

以下配置将使 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>

默认情况下,将假定构造函数参数的类型为字符串。您可以使用 type 特性来进行更改。

<parameter value="2" type="System.Int32" />

 

数据库初始值设定项

数据库初始值设定项针对每个上下文配置。可以使用 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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值