簡體   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