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

问题描述 投票:1回答:1

我正在研究Xamarin.Forms应用程序并使用EF 6目标.net标准2.0。应用程序在我的DBContext类的app store上运行如下。

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

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

dotnet ef migrations add Initial
dotnet ef update database

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

c# xamarin.forms xamarin.android entity-framework-6 entity-framework-core
1个回答
0
投票

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

  1. add-migration Initial用于与生产数据库等效的模型(即,没有在User表中新添加的列以及在部署到生产后执行的其他更改)。
  2. 手动更新生产数据库__EFMigrationsHistory以包含Initial迁移。
  3. add-migration XXX用于更新的模式(即新列等)。
  4. 然后XXX应该通过Database.EnsureMigrate()方法应用于您的生产数据库。
© www.soinside.com 2019 - 2024. All rights reserved.