Как получить динамический доступ к таблицам в нескольких базах данных с помощью Entity Framework Core?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить динамический доступ к таблицам в нескольких базах данных с помощью Entity Framework Core?

Сообщение Anonymous »

В моей компании есть система следующей структуры:
  • Формируемые хосты: определены серверы. по их IP-адресам.
  • Формируемые базы данных: каждая база данных создается на основе кода страны.
  • Таблицы для конкретной компании: каждая Компания имеет свой набор таблиц (одинаковая структура для всех компаний), которые называются по коду компании. В именах некоторых таблиц также указан год.
В настоящее время мы используем динамические хранимые процедуры для запроса базы данных SQL Server. Этот процесс включает использование централизованной таблицы COMPANY (общей для всех компаний) для получения необходимой информации о сервере, базе данных, балансовой единице и году. Затем это используется для построения динамического SQL-запроса. Вот пример нашего текущего подхода:

Код: Выделить всё

USE dbUnified
GO
DECLARE
@SQL NVARCHAR(MAX) = ''
,@idCompany INT
,@serverERP VARCHAR(50)
,@baseERP VARCHAR(50)
,@codeERP VARCHAR(50)
,@yearERP VARCHAR(50)

SELECT
@serverERP = C.serverERP
,@baseERP = C.baseERP
,@codeERP = C.codeERP
,@yearERP = C.yearERP
FROM
COMPANY C
WHERE
idCompany = @idCompany

-- Dynamic SQL for tables without year
SET @SQL = '
SELECT
*
FROM
['+@serverERP+'].['+@baseERP+'].[dbo].[TABLENAME'+@codeERP+'00]
'

-- Dynamic SQL for tables with year
SET @SQL = '
SELECT
*
FROM
['+@serverERP+'].['+@baseERP+'].[dbo].[TABLENAME'+@codeERP+@yearERP+']
'

EXEC SP_ExecuteSQL @SQL
Сейчас мы переходим на Entity Framework Core (EF Core), и я не знаю, как воспроизвести это динамическое поведение с помощью C#. Вот проблемы, с которыми я столкнулся:
  • Динамическое сопоставление таблиц и столбцов

    Имена таблиц базы данных не интуитивно понятны. Например:
    • Имена таблиц: PL03{CompanyCode}00 или SupplyerManager{CompanyCode}{YearERP.< /p>
    • Имена столбцов: PL03001, PL03002 и т. д.
    Мне хотелось бы сопоставить имена этих таблиц и столбцов со значимыми именами в C#. Например:
    • Таблица PL03{CompanyCode}00 → Счет

      Столбец PL03001 → Код поставщика, PL03002 → Номер счета и т. д.
  • Динамический выбор базы данных

    Мой текущий DbContext взаимодействует только с фиксированными таблицами (например, dbUnified) ). Мне нужно программно динамически подключаться к другим базам данных и таблицам.
  • Ожидаемое использование

    Мне нужен один DbContext, который позволит мне динамически запрашивать данные, например:

    Код: Выделить всё

    companyInfoDbContext.Invoice.FirstOrDefault(x => x.supplierCode == "123" && x.invoiceNumber == "321");
    // or
    companyInfoDbContext.Supplier.FirstOrDefault(x => x.supplierCode == "123");
    
    
Что я уже пробовал:
  • Я создал DbContext для dbUnified, который отлично работает для статических таблиц.
  • Однако я не понял, как программно обрабатывать несколько баз данных.
Вопрос:
Как реализовать в EF Core решение, которое позволяет:
  • Динамическая база данных и выбор таблиц.
  • Сопоставление имен таблиц и столбцов. к значимым моделям и свойствам C#.
Будем очень признательны за любые рекомендации или примеры того, как этого добиться!

Подробнее здесь: https://stackoverflow.com/questions/793 ... y-framewor
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»