首页 > 解决方案 > 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"

标签: c#xamarin.formsentity-framework-coremigration

解决方案


似乎我找到了解决方案。

public class DbMigrationContext : SqliteContext
    {
        public DbContext() : base(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "narco.db"))
        {
            
        }
    }

我将这个类添加到我的核心项目中,所以如果我在项目中使用的上下文有任何变化,它们会自动反映在我用来创建迁移的上下文中。

    [DbContext(typeof(DbMigrationContext))]

放在我的迁移之上,因此找不到。所以当我把它改成

    [DbContext(typeof(SqliteContext))]

它现在按预期工作。所以我想从现在开始,我将使用我的 SqliteContext 断开对我的项目的引用,然后将其复制过来以避免这样的问题。

希望遇到此问题的人会发现这很有用。


推荐阅读