Я пытаюсь создать модульный проект в ASP. NET Core с Entity Framework Core. Итак, мой план состоит в том, чтобы иметь базовый проект, который содержит такие вещи, как аутентификационный конфиг, модель идентификации Будет реализован проект с несколькими функциональными модулями, который можно активировать в зависимости от того, что купил клиент.
Проблема заключается в том, как решить проблему миграции в базе данных. Модули были бы все отделены, но они могли бы нуждаться в базовом проекте. Например, если модуль хочет сослаться на пользователя для записи в базе данных.
Я создал CoreDbContext
(в базовом проекте).
public class CoreDbContext : DbContext
{
public DbSet<WeatherForecast> WeatherForecasts { get; set; }
public CoreDbContext()
{ }
public CoreDbContext(DbContextOptions<CoreDbContext> options) : base(options)
{ }
}
public class WeatherForecast
{
public int Id { get; set; }
public DateTime Date { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
public string Summary { get; set; }
}
MeasurementsDbContext
(это проект функционального модуля)
public class MeasurementsDbContext : DbContext
{
public DbSet<Measurement> Measurements { get; set; }
public MeasurementsDbContext()
{ }
public MeasurementsDbContext(DbContextOptions<MeasurementsDbContext> options) : base(options)
{ }
}
public class Measurement
{
public int Id { get; set; }
public int Value { get; set; }
public WeatherForecast Weather { get; set; } //Heres the reference (FK)
}
Настроил проект так (Startup.cs)
services.AddDbContext<CoreDbContext>(
options =>
{
options.UseNpgsql(npsqlConnectionString, b =>
{
b.MigrationsAssembly("Core");
});
}
);
services.AddDbContext<MeasurementsDbContext>(
options =>
{
options.UseNpgsql(npsqlConnectionString, b =>
{
b.MigrationsAssembly("Measurements");
});
}
);
Проблема:
EF хочет создать таблицу для класса WeatherForecast
в модуле Measurement
, поэтому она будет продублирована, потому что Core (базовый проект) также создает ее.
Мои вопросы:
Могу ли я решить эту проблему, чтобы создать правильный файл миграции? Или, может быть, мне нужно «взломать» файл миграции или это плохая практика?
DbContext
должны были быть отдельные базы данных? Способ, которым я хочу достичь этого, вопреки соглашениям / правилам EF Core?
Что вы предлагаете для создания такого модульного проекта? (Я бы предпочел не использовать микроуслуги)