Entity Framework中基于代码的配置
Entity Framework 6引入了基于代码的配置。现在,您可以使用之前在app.config的部分中配置的代码配置实体框架相关设置。但是,app.config优先于基于代码的配置。换句话说,如果在代码和app.config中都设置了配置选项,那么将使用app.config中的设置。
让我们看看如何使用Entity Framework 6实现基于代码的配置。
首先,你需要创建一个派生DbConfiguration (System.Data.Entity.DbConfiguration)类的新类:
public class FE6CodeConfig : DbConfiguration
{
public FE6CodeConfig()
{
//在此定义配置
}
}
现在,你可以在app.config中设置codeconfigationtype属性,如下所示:
<entityFramework codeConfigurationType="EF6DBFirstTutorials.FE6CodeConfig, EF6DBFirstTutorials"></entityFramework>
或者你可以在上下文类上使用DbConfigurationType属性来设置基于代码的配置类:
注意:EF不支持在同一个AppDomain中使用多个配置类。如果使用此属性为两个上下文设置不同的配置类,则会引发异常。
现在,你可以在构造函数中使用DbConfiguration的各种方法,如下所示:
让我们看看如何使用基于代码的配置以及app.config应用不同的设置。
配置默认连接工厂
使用SetDefaultConnectionFactory()方法为SQL Server配置默认连接工厂,如SqlConnectionFactory,如下所示。
public class FE6CodeConfig : DbConfiguration
{
public FE6CodeConfig()
{
this.SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlConnectionFactory());
}
}
默认连接工厂在app.config中配置,如下所示。
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
</entityFramework>
设置数据库提供程序
使用SetProviderServices()方法配置数据库提供程序,如下所示。
public class FE6CodeConfig : DbConfiguration
{
public FE6CodeConfig()
{
this.SetProviderServices("System.Data.SqlClient",
System.Data.Entity.SqlServer.SqlProviderServices.Instance);
}
}
数据库提供程序可以在EF 6中的app.config中配置,如下所示。
<entityFramework>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
</providers>
</entityFramework>
设置数据库初始化项
您可以使用基于代码的配置设置数据库初始化器(仅针对Code-First),如下所示:
public class FE6CodeConfig : DbConfiguration
{
public FE6CodeConfig()
{
this.SetDatabaseInitializer<SchoolDBEntities>(new CustomDBInitializer<SchoolDBEntities>());
}
}
可以在app.config中配置与上面相同的内容,如下所示。
<entityFramework>
<contexts>
<context type="EF6DBFirstTutorials.SchoolDBEntities, EF6DBFirstTutorials">
<databaseInitializer type="EF6DBFirstTutorials.CustomDBInitializer , EF6DBFirstTutorials">
</databaseInitializer>
</context>
</contexts>
</entityFramework>
参考
https://www.entityframeworktutorial.net/
https://msdn.microsoft.com/