Entity Framework Core несколько DbContext с перекрестной ссылкой - PullRequest
0 голосов
/ 11 января 2020

Я пытаюсь создать модульный проект в 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 (базовый проект) также создает ее.

Мои вопросы:

  1. Могу ли я решить эту проблему, чтобы создать правильный файл миграции? Или, может быть, мне нужно «взломать» файл миграции или это плохая практика?

  2. DbContext должны были быть отдельные базы данных? Способ, которым я хочу достичь этого, вопреки соглашениям / правилам EF Core?

  3. Что вы предлагаете для создания такого модульного проекта? (Я бы предпочел не использовать микроуслуги)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...