• Entity Framework 数据库初始化的三种方法


    在数据库初始化产生时进行控制,有三个方法可以控制数据库初始化时的行为。分别为CreateDatabaseIfNotExists、DropCreateDatabaseIfModelChanges、DropCreateDatabaseAlways。

    一、定义

    1、CreateDatabaseIfNotExists:在没有数据库时创建一个,这是默认行为。

    2、DropCreateDatabaseIfModelChanges:模型改变时,自动重新创建一个新的数据库,就可以用这个方法。在这开发过程中非常有用。

    3、DropCreateDatabaseAlways:每次运行时都重新生成数据库。

    二、使用

    1、新建一个类继承

    public class EasyUIInitializer : DropCreateDatabaseIfModelChanges<EasyUIContext>
    {
      
    }

    2、重写Seed方法,插入数据

    protected override void Seed(EasyUIContext context)
    {
        var resources = new List<Resource> 
        { 
            new Resource { Name = "其它管理", IconCls="icon-widgets" ,ParentId=null,Sort=100000,Category=1,CreateId=1},
            new Resource { Name = "系统资源", IconCls="icon-navigation" ,ParentId=1,Sort=1,Category=2,CreateId=1},
            new Resource { Name = "角色列表", IconCls="icon-navigation" ,ParentId=1,Sort=5,Category=2,CreateId=1},
            new Resource { Name = "后台用户", IconCls="icon-navigation" ,ParentId=1,Sort=5,Category=2,CreateId=1},
            new Resource { Name = "系统日志", IconCls="icon-navigation" ,ParentId=1,Sort=5,Category=2,CreateId=1}
        };
        resources.ForEach(s => context.Resource.Add(s));
        context.SaveChanges();
    
        base.Seed(context);
    }

    3、运行

      在Global.asax里执行

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
    
        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    
        Database.SetInitializer<EasyUIContext>(new EasyUIInitializer());
    }

      或在EF上下文的OnModelCreating里执行

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer<EasyUIContext>(new EasyUIInitializer()); 
    }

    4、其它

    初始化包括两个主要步骤。首先,使用Code First在内存中根据默认规则和配置创建模型。其次,使用已设置的数据库初始化器将用于存储数据的数据库初始化。

    初始化是延迟加载的,所以创建一个实例的是不完全满足初始化发生的条件的。必须执行对模型的操作,如查询或添加实体才会发生。

    但我们可以可以调用DbContext.Database.Initialize方法,对模型执行任何操作的时候强制初始化。

    using (var context = new EasyUIContext()) 
    {
        context.Database.Initialize(true); 
    }
  • 相关阅读:
    设置函数环境——setfenv(转)
    全局变量声明的规范化(转)
    利用__index和__newindex实现默认值表、监控表、只读表(转)
    php中的$_GET怎样获取带有井号“#”的參数
    Servlet配置load-on-startup
    LinQ—扩展方法
    CRT
    [C++] 获取IE代理server的账号password
    一步一步写算法(之hash表)
    android之PackageManager简单介绍
  • 原文地址:https://www.cnblogs.com/weiweixiang/p/5504077.html
Copyright © 2020-2023  润新知