我正在研究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()的代码但是现在我必须迁移和更新数据库但是,它不起作用并且总是我得到表已经存在错误。
与我之前的评论相比,这是一种更安全的方法
add-migration Initial
用于与生产数据库等效的模型(即,没有在User
表中新添加的列以及在部署到生产后执行的其他更改)。__EFMigrationsHistory
以包含Initial
迁移。add-migration XXX
用于更新的模式(即新列等)。XXX
应该通过Database.EnsureMigrate()
方法应用于您的生产数据库。