Использование одного класса DbContext для нескольких соединений / баз данных (SQLite | Postgres) в EntityFramework.Core одновременно - PullRequest
0 голосов
/ 08 февраля 2019

Этот вопрос задавался несколько раз ранее, но я не нашел решения, которое бы мне помогло.

У меня есть две разные базы данных (SQLite и postgres) с одинаковыми DbContext (TranslationContext).

Я хочу «открыть» обе базы данных и читать / писать друг другу.

Существуют следующие проблемы, в которых мне нужна помощь:

  • Как настроить внедрение зависимостей (StructureMap)
  • Как получить различные контексты с помощью IDbContextScopeFactory

Внедрение зависимостей

Как различить их?Есть ли возможность дать им имя экземпляра, например local, remote?

c.For<DbContextOptions<TranslationContext>>().Use(
    new DbContextOptionsBuilder<TranslationContext>()
    .UseNpgsql(new NpgsqlConnectionStringBuilder
    {
        Host = "10.11.12.13",
        Username = "fooUser",
        Password = "fooPw",
        Port = 5432,
        Database = "Translations",
        PersistSecurityInfo = true

    }.ConnectionString).Options);

c.For<DbContextOptions<TranslationContext>>().Use(
    new DbContextOptionsBuilder<TranslationContext>()
        .UseSqlite("Data Source= fooFilePath")
        .Options);

, используя IDbContextScopeFactory

Это нормальный способ, которым я 'м, используя IDbContextScopeFactory.Но до сих пор у меня всегда были разные DbContext и не было проблем.

using (var scope = contextScopeFactory.Create())
{
    var translations = scope.DbContexts.Get<TranslationContext>().Translations;

    // How to get the sqlite and how to get the postgres context?

}

TranslationContext

public class TranslationContext : DbContext
{
    public DbSet<DbTextTranslation> Translations { get; set; }

    public TranslationContext(DbContextOptions<TranslationContext> options) : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("public");

        // use lower case columns
        modelBuilder.ApplyConfiguration(new DbTextTranslation.DbConfiguration());
        base.OnModelCreating(modelBuilder);
    }        
}
...