#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 и просто скопирую его, чтобы избежать подобных проблем.
Надеюсь, у кого есть эта проблема, это будет полезно.