【译】第38节---EF6-基于代码的配置

原文:http://www.entityframeworktutorial.net/entityframework6/code-based-configuration.aspx

EF6引入了基于代码的配置。你仍可以使用以前在app.config的<entityframework>节点中配置的代码来配置Entity Framework相关设置。

但是,app.config优先于基于代码的配置。 换句话说,如果在代码和配置文件中都设置了配置选项,则使用配置文件中的设置。

我们来看看如何使用Entity Framework 6实现基于代码的配置。

首先,需要创建一个派生DbConfiguration(System.Data.Entity.DbConfiguration)类的新类:

public class FE6CodeConfig : DbConfiguration
{
    public FE6CodeConfig()
    {
        //define configuration here
    }
}

现在,可以在配置文件中设置codeConfigurationType,如下所示:

<entityFramework codeConfigurationType="EF6DBFirstTutorials.FE6CodeConfig, EF6DBFirstTutorials">
</entityFramework>

或者可以使用上下文类中的DbConfigurationType属性来设置基于代码的配置类:

注意:EF不支持在同一AppDomain中使用多个配置类。 如果使用此属性为两个上下文设置不同的配置类,则会抛出异常。

现在,可以在构造函数中使用DbConfiguration的不同方法,如下所示:

让我们看看如何使用基于代码的配置以及配置文件进行不同的设置。

设置默认连接工厂

基于代码的配置:

public class FE6CodeConfig : DbConfiguration
    {
        public FE6CodeConfig()
        {
            this.SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlConnectionFactory());
        }
    }

基于配置文件:

<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>

设置数据库Provider

基于代码的配置:

public class FE6CodeConfig : DbConfiguration
{
    public FE6CodeConfig()
    {
    this.SetProviderServices("System.Data.SqlClient", 
                System.Data.Entity.SqlServer.SqlProviderServices.Instance);
    }
}

基于配置文件:

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

设置数据库初始化

基于代码的配置:

public class FE6CodeConfig : DbConfiguration
    {
        public FE6CodeConfig()
        {
            this.SetDatabaseInitializer<SchoolDBEntities>(new CustomDBInitializer<SchoolDBEntities>());
        }
    }

基于配置文件:

<entityFramework>
    <contexts>
        <context type="EF6DBFirstTutorials.SchoolDBEntities, EF6DBFirstTutorials"  >
        <databaseInitializer   type="EF6DBFirstTutorials.CustomDBInitializer , EF6DBFirstTutorials">
        </databaseInitializer>
        </context>
    </contexts>    
    </entityFramework>
原文地址:https://www.cnblogs.com/talentzemin/p/7380690.html