繁体   English   中英

如何在Database.EnsureCreated()和EF Xamarin.Forms之后使用Database.Migration()

[英]How to use Database.Migration() after Database.EnsureCreated() EF Xamarin.Forms

我正在开发Xamarin.Forms应用程序,并使用EF 6面向.net standard 2.0 该应用程序通过我的DBContext类在应用程序商店中实时运行,如下所示。

public class DatabaseContext : DbContext
{
    private readonly string _databasePath;

    // Hotworks related tables
    public DbSet<User> User { get; set; }
    public DbSet<UserProfile> UserProfile { get; set; }

    public DatabaseContext(string databasePath)
    {
        _databasePath = databasePath;
        Database.EnsureCreated();
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite($"Filename={_databasePath}");    
    }
}

现在,我必须在用户表中添加一个新列。 为此,我创建了一个.net核心控制台应用程序,并使用以下命令生成了迁移文件夹。

dotnet ef migrations add Initial
dotnet ef update database

然后,将生成的Migration文件夹复制到我的dbContext项目中,并将Database.EnsureCreated()更改为Database.Migration()但是,我得到了SQLite错误1:表“ User”已经存在 有什么帮助吗? 生产中的代码已经具有Database.EnsureCreated(),但是现在我必须迁移和更新数据库,但是它无法正常工作,并且总是让我得到表已存在的错误。

与我之前的评论相比,这是一种更安全的方法

  1. add-migration Initial等效于生产数据库的模型的add-migration Initial值(即User表中没有新添加的列,以及您部署到生产后所做的其他更改)。
  2. 手动更新生产数据库__EFMigrationsHistory以包括Initial迁移。
  3. 为更新的架构(即新列等) add-migration XXX
  4. 然后应通过Database.EnsureMigrate()方法将XXX应用于生产数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM