- Формируемые хосты: определены серверы. по их IP-адресам.
- Формируемые базы данных: каждая база данных создается на основе кода страны.
- Таблицы для конкретной компании: каждая Компания имеет свой набор таблиц (одинаковая структура для всех компаний), которые называются по коду компании. В именах некоторых таблиц также указан год.
Код: Выделить всё
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
- Динамическое сопоставление таблиц и столбцов
Имена таблиц базы данных не интуитивно понятны. Например:- Имена таблиц: PL03{CompanyCode}00 или SupplyerManager{CompanyCode}{YearERP.< /p>
- Имена столбцов: PL03001, PL03002 и т. д.
- Таблица 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
Мобильная версия