c# - 如何在 Database.EnsureCreated() EF Xamarin.Forms 之后使用 Database.Migration()
问题描述
我正在开发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}");
}
}
现在,我必须在用户表中添加一个新列。为此,我创建了一个.net 核心控制台应用程序并使用以下命令生成了迁移文件夹。
dotnet ef migrations add Initial
dotnet ef update database
然后,我将生成的 Migration 文件夹复制到我的 dbContext 项目并将Database.EnsureCreated()更改为Database.Migration()但是,我收到SQLite 错误 1: Table "User" already exists。有什么帮助吗?代码已经在生产中具有Database.EnsureCreated()但现在我必须迁移和更新数据库,但是它不工作并且总是我得到表已经存在错误。
解决方案
与我之前的评论相比,这是一种更安全的方法
add-migration Initial
对于与生产数据库等效的模型(即没有表中新添加的列User
以及您在部署到生产后所做的其他更改)。- 手动更新生产数据库
__EFMigrationsHistory
以包含Initial
迁移。 add-migration XXX
对于更新的架构(即新列等)。XXX
然后应该通过该Database.EnsureMigrate()
方法应用于您的生产数据库。
推荐阅读
- api - 无法访问在应用程序脚本中制作的 API 内容
- python - 如果 GridSearchCV 给出了一些排名为 1 的估计器,它将选择哪一个作为最佳估计器?
- javascript - React 的视差效果
- oracle - 安装oracle数据库速成版报错/u01/app/oracle/product/11.2.0/xe/bin/nls_lang.sh: No such file or directory
- matlab - 如何每 100 个值找到一行的前 10 个值?
- ionic-framework - 如何在离子应用程序中关闭硬件后退按钮上的模式?
- spring-boot - Log4j2 log4j-核心
- storage - 自有存储与引用存储
- google-chrome-extension - Chrome WebStore Licensing API:扩展开发者应该拥有 FULL 访问权限而不是 FREE_TRIAL
- r - 如何使用 '。' 在带有数值公式的 magrittr 中