我正在开发 Xamarin.Forms 应用程序,并使用EF 6定位 .net标准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(),但是,我得到了< strong> SQLite错误1:表“用户”已存在。有什么帮助吗?生产中的代码已经具有 Database.EnsureCreated(),但是现在我不得不迁移和更新数据库,但是它无法正常工作,并且我总是得到 表已经存在 错误。
答案 0 :(得分:0)
与我之前的评论相比,这是一种更安全的方法
add-migration Initial
用于与生产数据库等效的模型(即没有在User
表中新添加的列以及在部署到生产后您所做的其他更改) 。__EFMigrationsHistory
以包括Initial
迁移。add-migration XXX
用于更新的架构(即新列等)。XXX
方法将Database.EnsureMigrate()
应用于生产数据库。