5

Я использую ASP.NET EF Core с MySQL (драйвер Pomelo.EntityFrameworkCore.MySql). Причина такого контекста нужно несколько строк конкретной конфигурации, которая DbContext по умолчанию с MSSQL не имеет, я создал MySqlContext:Исключить DbContext из миграций во избежание контекста-параметра

public class MySqlContext : DbContext { 
    string connectionString; 
    // ... 
} 

Так что все мои DbContexts унаследованы от тех класса:

public class MyDbContext: MySqlContext { 
    public DbSet<MyModel> MyModels{ get; set; } 
    // ... 
} 

В моем проекте у меня есть один контекст (DbContext), который содержит DbSets. И MySqlContext, который не является настоящим контекстом, так как он не имеет DbSets и действует только как оболочка для конфигурации MySQL, поэтому я могу лучше их повторно использовать.

Но, похоже, что миграция будет видеть их как два разных контекстах, потому что, когда я добавляю миграции с помощью команды Add-Migration Test я получил ошибку

Более один DbContext был найден. Укажите, какой из них использовать. Используйте параметр «-Context» для команд PowerShell и параметр «--context» для команд dotnet.

Поэтому при каждой миграции я должен добавить команду -Context MyContext. Я хотел бы избежать этого, потому что, как я уже сказал, второй MySqlContext не является реальным контекстом, который содержит модели и миграции. Есть ли способ сообщить об этом инструменту миграции? Мне нужно что-то вроде атрибута [NotMapped] для моделей EF, который сообщает EF: Dont сохраняет это свойство в базе данных. Как и мне, мне нужно сказать EF: Игнорируйте класс MySqlContext, потому что им не нужны миграции.

ответ

5

Сделать базовый класс аннотация:

public abstract class MySqlContext : DbContext { 
    string connectionString; 
    // ... 
} 
+0

Черт, так легко и логично, спасибо! Здесь мы говорим: «Иногда вы не можете увидеть лес для деревьев»: D – Lion

2

Use-DbContext MyContext Команда установит MyContext как контекст по умолчанию использовать для PowerShell сессии. Это еще один способ избежать необходимости указывать -Context каждый раз.