Wie kann ich mit Entity Framework Core dynamisch auf Tabellen in mehreren Datenbanken zugreifen?C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Wie kann ich mit Entity Framework Core dynamisch auf Tabellen in mehreren Datenbanken zugreifen?

Post by Anonymous »

In meinem Unternehmen haben wir ein System mit folgender Struktur:
  • Formbare Hosts: Server sind definiert nach ihren IP-Adressen
  • Formbare Datenbanken: Jede Datenbank wird basierend auf einem Ländercode erstellt
  • Unternehmensspezifische Tabellen: Jedes Unternehmen hat seine eigenen Satz von Tabellen (gleicher Aufbau für alle Firmen), die nach dem Buchungskreis benannt werden. Einige Tabellennamen enthalten auch das Jahr.
Derzeit verwenden wir dynamische gespeicherte Prozeduren, um eine SQL Server-Datenbank abzufragen. Der Prozess umfasst die Verwendung einer zentralisierten COMPANY-Tabelle (die von allen Unternehmen gemeinsam genutzt wird), um die erforderlichen Server-, Datenbank-, Firmencode- und Jahresinformationen abzurufen. Dies wird dann verwendet, um eine dynamische SQL-Abfrage zu erstellen.
Hier ist ein Beispiel unseres aktuellen Ansatzes:

Code: Select all

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
Wir wechseln jetzt zu Entity Framework Core und ich bin mir nicht sicher, wie ich dieses dynamische Verhalten mit C# reproduzieren kann.
Hier sind die Herausforderungen, die ich habe Ich stehe vor:
  • Dynamische Tabellen- und Spaltenzuordnung

    Die Namen der Datenbanktabellen sind nicht intuitiv. Zum Beispiel:
    • Tabellennamen: PL03{CompanyCode}00 oder SupplyerManager{CompanyCode}{YearERP}.
    • Spaltennamen: PL03001, PL03002 usw.
    Ich möchte diese zuordnen Tabellen- und Spaltennamen in aussagekräftige Namen umwandeln in C#. Zum Beispiel:
    • Tabelle PL03{CompanyCode}00 → Rechnung
    • Spalte PL03001 → Lieferantencode, PL03002 → Rechnungsnummer usw.
    < li>Dynamische Datenbankauswahl

    Mein aktueller DbContext interagiert nur mit festen Tabellen (z. B. dbUnified). Ich muss programmgesteuert eine dynamische Verbindung zu anderen Datenbanken und Tabellen herstellen.
  • Erwartete Verwendung

    Ich hätte gerne eine einzelne DbContext, mit dem ich Daten dynamisch abfragen kann, etwa so:

    Code: Select all

    companyInfoDbContext.Invoice.FirstOrDefault(x => x.supplierCode == "123" && x.invoiceNumber == "321");
    // or
    companyInfoDbContext.Supplier.FirstOrDefault(x => x.supplierCode == "123");
    
Was ich bisher versucht habe
< ul>
[*]Ich habe einen DbContext für dbUnified erstellt, der gut für statische Tabellen funktioniert

[*]Allerdings habe ich nicht herausgefunden, wie ich programmgesteuert mit mehreren Datenbanken umgehen kann


Frage
Wie kann ich eine Lösung in EF Core implementieren? ermöglicht:
  • Dynamische Datenbank- und Tabellenauswahl.
    Zuordnung von Tabellen-/Spaltennamen zu aussagekräftigen C#-Modellen und -Eigenschaften.< /li>
Jede Anleitung oder Beispiele, wie dies erreicht werden kann, wären sehr hilfreich Vielen Dank!
Image

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post