- Формируемые хосты: определены серверы по их 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.
- Имена столбцов: 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");
< ul>
[*]Я создал DbContext для dbUnified, который отлично работает для статических таблиц
[*]Однако я не понял, как программно обрабатывать несколько баз данных
Вопрос
Как реализовать в EF Core решение, которое позволяет:
- Динамический выбор базы данных и таблиц.
Сопоставление имен таблиц/столбцов со значимыми моделями и свойствами C#.< /li>
Подробнее здесь: https://stackoverflow.com/questions/793 ... y-framewor
Мобильная версия