我当时正在开发一个 Xamarin.Forms 应用程序并使用面向 .net standard 2.0 的 EF 6。该应用程序与我的 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}");
}
}
现在,我必须向User 表添加一个新列。为此,我创建了一个 .net 核心控制台应用程序,并使用以下命令生成了迁移文件夹。
dotnet ef migrations add Initial
dotnet ef update database
然后,我将生成的 Migration 文件夹复制到我的 dbContext 项目并将 Database.EnsureCreated() 更改为 Database.Migration() 但是,我得到了 < strong>SQLite 错误 1:表“用户”已存在。有什么帮助吗?生产中的代码已经有 Database.EnsureCreated() 但现在我必须迁移和更新数据库,但它不起作用,而且我总是得到 表已经存在 错误。
最佳答案
与我之前的评论相比,这是一种更安全的方法
add-migration Initial
用于相当于生产数据库的模型(即没有User
表和其他新添加的列您在部署到生产环境后所做的更改)。- 手动更新生产数据库
__EFMigrationsHistory
以包含Initial
迁移。 add-migration XXX
用于更新的架构(即新列等)。XXX
然后应通过Database.EnsureMigrate()
方法应用于您的生产数据库。
关于c# - 如何在 Database.EnsureCreated() EF Xamarin.Forms 之后使用 Database.Migration(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54898927/