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); 
}

转载于:https://www.cnblogs.com/weiweixiang/p/5504077.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值