Как я могу кодировать метод для повторного использования, когда критическим параметром является EF DbContext? - PullRequest
0 голосов
/ 07 июня 2019

У меня есть 4 разные базы данных SQL, которые содержат похожие данные все они основаны на одной модели. Они различаются в зависимости от версии данных, где они используются и т. Д.

Db1Context
Db2Context
Db3Context
Db4Context

После инициализации мне нужно убедиться, что каждая из баз данных имеет одну родительскую запись, поэтому я запускаю метод, который выглядит примерно так:

Sub EnsureATableExists()
  Dim theDb = New Db1Context
  Dim parentTable = theDb.parentTables.Where(Function(x) x.somedata = "somedata").FirstOrDefault()
  If parentTable Is Nothing Then
    parentTable = CreateTable()
    theDb.parentTables.Add(parentTable)
    theDb.SaveChanges()
  End If
End Sub

Но в настоящее время у меня есть 4 из этих методов, которые оскорбляют мое ощущение СУХОГО. Но я не пишу этот метод для повторного использования, потому что объявление DbContext уникально, и я не могу параметризовать DbContext для передачи.

Я предполагаю, что есть некоторый общий метод для кодирования этого, и был бы признателен за обучение.

Дополнительный код добавлен в комментарий ниже:

Это мой текущий контекст. Повторяется еще 3 раза с разными именами, как указано выше, и соответствующими строками соединения.

Я преобразовал свой vb.net в C # и думаю, что смогу преобразовать любые примеры обратно в vb.net.

public class Db1Context : DbContext
{
    public Db1Context() : base("Db1Connection")
    {
    }

    public Db1Context (string connectionString) : base(connectionString)
    {
    }

    public DbSet<Table1> Table1s { get; set; }
    public DbSet<Table2> Table2s { get; set; }
}

Как определить класс, который должен быть унаследован, где я могу определить новую строку подключения, и как будут выглядеть новые контексты Db1-Db4 при наследовании?

...