Как динамически получать доступ к таблицам в нескольких базах данных с помощью 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, и я не знаю, как воспроизвести это динамическое поведение с помощью C#.
Вот проблемы, с которыми мне приходится сталкиваться столкнулся с:
  • Динамическое сопоставление таблиц и столбцов

    Имена таблиц базы данных не интуитивно понятны. Например:
    • Имена таблиц: PL03{CompanyCode}00 или SupplyerManager{CompanyCode}{YearERP.
    • Имена столбцов: PL03001, PL03002 и т. д.
    Я хочу сопоставить их таблица и столбец имена на значимые имена в C#. Например:
    • Таблица PL03{CompanyCode}00 → Счет
    • Столбец PL03001 → код поставщика, PL03002 → номер счета-фактуры и т. д.
    < li>Динамический выбор базы данных

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

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

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

    companyInfoDbContext.Invoice.FirstOrDefault(x => x.supplierCode == "123" && x.invoiceNumber == "321");
    // or
    companyInfoDbContext.Supplier.FirstOrDefault(x => x.supplierCode == "123");
    
Что я уже пробовал
< ul>
[*]Я создал DbContext для dbUnified, который отлично работает для статических таблиц

[*]Однако я не понял, как программно обрабатывать несколько баз данных


Вопрос
Как реализовать в EF Core решение, которое позволяет:
  • Динамический выбор базы данных и таблиц.
    Сопоставление имен таблиц/столбцов со значимыми моделями и свойствами C#.< /li>
Любые рекомендации или примеры того, как этого добиться, были бы очень полезны. признателен!
Изображение


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

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

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

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

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

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