zoukankan      html  css  js  c++  java
  • EF Code First之困扰

      Code First自动更新数据库有几种方法

      Code First什么都不做

    Database.SetInitializer<ShopContext>(null);

      发布网站的话一般要在Application_Start方法里加上这句,发布后不需要Code First了。

      Code First总是重建数据库并重设数据库种子

    Database.SetInitializer(new DropCreateDatabaseAlways<MyContext, DAL.Configuration>());

      Code First仅在模型更改时重建数据库并重设数据库种子

    Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyContext, DAL.Configuration>());

      可是这几种在开发阶段都不适合,因为我并不希望重建数据库,只是想增量更新数据库,于是又找到一种

      Code First增量更新数据库并增量更新数据库种子

    Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyContext, DAL.Migrations.Configuration>());

      其中DAL.Migrations.Configuration如下

     1 public class Configuration : DbMigrationsConfiguration<MyContext>
     2     {
     3         public Configuration()
     4         {
     5             //允许代码自动迁移数据库
     6             AutomaticMigrationsEnabled = true;
     7             //允许自动迁移时数据丢失(如删除列)
     8             AutomaticMigrationDataLossAllowed = true;
     9         }
    10 
    11         protected override void Seed(MyContext context)
    12         {
    13             context.Account.AddOrUpdate(o => o.AccountName, new SH_Account
    14             {
    15                 AccountName = "admin",
    16                 NickName = "管理员",
    17                 AccountPwd = "123456",
    18                 Email = "4564589@qq.com",
    19                 Phone = "13289463547"
    20             });
    21          }
    22     }

      可是,我发现DbMigrationsConfiguration依然有不少问题,比如修改字符串长度限制的话执行增量更新数据库是会报错的,去除带外键的字段加带外键的字段也容易报错,并且一旦出错基本就只能删除数据库重新执行了,也就是说DbMigrationsConfiguration并不是很可靠,谁知道怎么解决这个困扰呢。。。

  • 相关阅读:
    C# WPF定时器
    C#处理JSON数据
    SQL-乐观锁,悲观锁之于并发
    C# 集合-并发处理-锁OR线程
    C# 生成二维码,彩色二维码,带有Logo的二维码及普通条形码
    C# (事件触发)回调函数,完美处理各类疑难杂症!
    C# Lambda表达式
    C# 匿名方法
    浅谈C# 匿名变量
    鸡兔同笼
  • 原文地址:https://www.cnblogs.com/hambert/p/3999901.html
Copyright © 2011-2022 走看看