Xamarin.Forms не находит миграции EntityFramework.Core

#c# #xamarin.forms #entity-framework-core #migration

#c# #xamarin.forms #entity-framework-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.Инструменты.

Я использую:

 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"
 

Ответ №1:

Кажется, я нашел решение.

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

Я добавил этот класс в свой основной проект, поэтому, если в моем контексте, который я использую в своем проекте, произошли какие-либо изменения, они автоматически отражаются в контексте, который я использую для создания своих миграций.

     [DbContext(typeof(DbMigrationContext))]
 

Помещается поверх моей миграции, поэтому она не найдена. Поэтому, когда я изменил его на

     [DbContext(typeof(SqliteContext))]
 

Теперь он работает так, как ожидалось. Так что, я думаю, с этого момента я просто отключу ссылку на мой проект с помощью моего SqliteContext и просто скопирую его, чтобы избежать подобных проблем.

Надеюсь, у кого есть эта проблема, это будет полезно.