zoukankan      html  css  js  c++  java
  • EntityFramework6.X 之 Database Initialization

    Database Initialization

    下图是数据库初始化的工作流

                                                               

    EF为数据库初始化准备了多种策略:

    l  CreateDatabaseIfNotExists:这是默认的初始化策略

    l  DropCreateDatabaseAlways:总是创建数据库,不管数据库中是否存在数据,每次应用程序启动时就会重新设置

    l  DropCreateDatabaseIfModelChanges:有且仅当领域模型发生改变的时候创建数据库

    若要启动测试数据则必须在应用程启动的时候通过Database.SetInitializer(new DropCreateDatabaseAlways<DBContext>())来初始化。

    数据库初始化也可以继承最原始IDatabaseInitializer<>类来创建经典原始的初始化

    public class AppTestContextCustomInitializer : IDatabaseInitializer<ApplicationDbContext>{

    public void InitializeDatabase(ApplicationDbContext context){

    if (context.Database.Exists()){

    if (!context.Database.CompatibleWithModel(true)){

           context.Database.Delete();}}

      context.Database.Create();

      context.Database.ExecuteSqlCommand("CREATE TABLE GLOBAL_DATA([KEY] VARCHAR(50), [VALUE] VARCHAR(250))");}}

    可以通过配置文件来指定初始化数据库类

    在<appSettings>节点中插入一个子节点:

    <appSettings>

    <add key="DatabaseInitializerForType CodeFirstDbInitializerDemo.BlogContext,CodeFirstDbInitializerDemo"

    value="CodeFirstDbInitializerDemo.BlogContextCustomInitializer, CodeFirstDbInitializerDemo" />

      </appSettings>

    在模型中可用特性[Table(“tablename”)]指定存储的表格名称

    EF中使用DbConfiguration类可定义一个Db配置类,使其继承DbConfiguration类,然后自定义Db配置,最后具体应用到具体的DbContext类上通过DbConfigurationType特性

    如先创建一个配置类:

    public class MyConfiguration : DbConfiguration{

      public MyConfiguration(){

    SetExecutionStrategy("providerName",()=>new  SqlAzureExecutionStrategy());

    SetDefaultConnectionFactory(new LocalDbConnectionFactory("v11.0"));}}

    使用的话可以通过两种方式:

    一种通过配置文件进行:

    <entityFramework codeConfigurationType="MyNamespace.MyDbConfiguration, MyAssembly"> 
        ...Your EF config... 
    </entityFramework>

    还有一种通过特性配置:

    [DbConfigurationType(typeof(MyDbConfiguration))] 
    public class MyContextContext : DbContext 

    }
  • 相关阅读:
    C Socket编程之Connect超时 (转)
    【c#】设置Socket连接、接收超时(转)
    socket测试远程地址能否连接并为连接设置超时(转)
    ZedGraph右键菜单怎样禁止它弹出(转)
    赚钱本身就是人生目的
    如果一个女人喜欢你,又不跟你在一起,而且只跟你很暧昧,那代表什么
    LayoutInflater的使用
    Android应用程序的生命周期
    Android的系统服务一览
    Android系统服务-简介
  • 原文地址:https://www.cnblogs.com/Terrece/p/6860302.html
Copyright © 2011-2022 走看看