c# - Xamarin.Forms 找不到 EntityFramework.Core 的迁移
问题描述
我想知道我做错了什么,因为 EnsureCreated() 可以按我的意愿工作,但 Migrate() 不起作用,因为找不到任何迁移。
这是一些代码:
public SqliteContext(string FileName)
{
this.FileName = FileName;
Database.EnsureCreated();
}
作品
但是当我做同样的事情时:
public SqliteContext(string FileName)
{
this.FileName = FileName;
Database.Migrate();
}
它没有。所以我检查了一下,似乎没有发现任何迁移。但是我的迁移与我的 SqliteContext/dbContext 在同一个项目中。(在地图迁移中)所以我假设我不必指定迁移程序集,但我也这样做了,但它仍然不起作用。
有关一些额外信息:
我的迁移由 Microsoft.EntityFrameworkCore.Tools 生成。
我在用:
Microsoft.EntityFrameworkCore.Tools 3.1.12
Microsoft.EntityFrameworkCore.Sqlite 3.1.12
Xamarin.Forms 5.0.0.2012
Xamarin.Essentials 1.6.1
FileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "narco.db"
解决方案
似乎我找到了解决方案。
public class DbMigrationContext : SqliteContext
{
public DbContext() : base(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "narco.db"))
{
}
}
我将这个类添加到我的核心项目中,所以如果我在项目中使用的上下文有任何变化,它们会自动反映在我用来创建迁移的上下文中。
[DbContext(typeof(DbMigrationContext))]
放在我的迁移之上,因此找不到。所以当我把它改成
[DbContext(typeof(SqliteContext))]
它现在按预期工作。所以我想从现在开始,我将使用我的 SqliteContext 断开对我的项目的引用,然后将其复制过来以避免这样的问题。
希望遇到此问题的人会发现这很有用。
推荐阅读
- laravel - 是否可以更改/修改 Laravel Passport 中的预定义路线?
- javafx - Javafx 与 Java 小程序
- python - 更改由 sklearn.model_selection.train_test_split 产生的数组中的值类型
- xml - Remove duplicates considering all element values
- java - Java-EE 创建的 WebDrivers 过期
- html - 具有多个元素的 CSS 浮动 2 列布局
- python - 如何打印keras Multi输出的混淆矩阵?
- excel - 在 VBA 中是否可以在 ThisworkBook 中获取 Friend 属性?
- git - 无法推送到 Azure DevOps git repo - 它没有要求用户名
- postgresql - 下载 PostgreSQL 10.4