zoukankan      html  css  js  c++  java
  • 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); 
    }
  • 相关阅读:
    add custom attribute to standard windows controls
    产生0到1之间均匀分布的一个随机数与随机数序列
    (HDOJ 1002)A + B Problem II
    递推问题系列1幂积序列
    杭电题目分类解答
    (HDOJ 1003)Max Sum
    快排序(递归算法)
    (HDOJ 1004)Let the Balloon Rise
    (HDOJ 1005)Number Sequence
    一个关于去除数组重复元素的问题(C语言实现)
  • 原文地址:https://www.cnblogs.com/weiweixiang/p/5504077.html
Copyright © 2011-2022 走看看