News combit Dev Blog

Unterstützung für datenbankübergreifende Relationen

Veröffentlicht: Donnerstag, 28. September 2017 | 0 Kommentar(e)
 
Das Konzept des .NET Datenproviders erlaubt es, fast jede Datenquelle anzubinden. Im Grunde ahmt es ein relationales Datenbankverwaltungssystem nach, das Tabellen, Relationen, Sortierungen usw. enthält. Oft müssen Sie aber Daten aus verschiedenen Quellen kombinieren, z. B. eine Server Logdatei mit Kundenlogins und eine SQL Kundendatenbank, die alle relevanten Informationen über die Kunden enthält.

Vor LL23 gab es keine einfache Möglichkeit, solche Daten relational zu verknüpfen, da Beziehungen nur innerhalb derselben Datenquelle definiert werden konnten, also nicht über mehrere verschiedene Datenquellen hinweg. Mit der kommenden Version 23 werden wir das ändern und endlich providerübergreifende Relationen unterstützen.

Diese Funktion wird intern ermöglicht, indem Filter auf die Kindtabelle aufgesetzt werden. Wir haben das Filtern auf Datenbankebene in Version 20 eingeführt, was diesen Prozess extrem schnell macht. Die Kindtabelle einer providerübergreifenden Relation muss lediglich die ApplyFilter-Methode der ITable Schnittstelle unterstützen. Dies wird z. B. automatisch für alle SQL-Datenquellen, DataSets, Objects (via LINQ), OData und andere unterstützt. Wenn Sie Ihren eigenen Provider, der ApplyFilter unterstützt, geschrieben haben, können Sie das Feature sofort nutzen.

Eine solche übergreifende Relation einzurichten ist einfach:

 // Prepare data providers
CsvDataProvider csvFile = new CsvDataProvider("ServerLog.log", true, "InetData", ';');
SqlConnectionDataProvider sqlServer = new SqlConnectionDataProvider(new SqlConnection("Server=SampleServer;Database=CRMDatabase"));

// Combine both data providers in a DataProviderCollection to be able to add relations between them
DataProviderCollection combinedDatasource = new DataProviderCollection { csvFile, sqlServer };

// Use a table from SQL Server as child table for rows from a CSV files (InetData -> Customers)
combinedDatasource.AddCrossProviderRelation("InetData2Customers",
/* Parent: */ csvFile,   "InetData", "CustomerID",
/* Child:  */ sqlServer, "Customers",   "CustomerID");

using (var LL = new ListLabel())
{
    LL.DataSource = combinedDatasource;
    LL.Design();
} 

Im Designer wird diese Relation wie eine "normale" Relation behandelt und in Berichtscontainern, Diagrammen, Drilldown etc. unterstützt. Solange die übergeordnete Tabelle ApplyFilter() unterstützt, können Sie auch innerhalb der untergeordneten Tabelle auf die 1:1 Daten der Elterntabelle zugreifen.

Das macht die Datenanbindung deutlich vielseitiger und benötigt nicht mehr den (nicht so gut skalierenden) Workaround einer In-Memory Datenbank wie hier skizziert - es funktioniert einfach direkt out-of-the-box :).




Autor: Jochen Bartlau
Entwicklungsleiter List & Label

Jochen Bartlau leitet als Geschäftsführer die Softwareentwicklung bei combit. Microsoft .NET und Agiles Projektmanagement sind zwei seiner Steckenpferde. Der technikbegeisterte Physiker verbringt seine Freizeit am liebsten mit seiner Familie.


  


Kommentare


Aktuell gibt es noch keine Kommentare zu diesem Blogbeitrag.

Ergänzen Sie hier Ihren Kommentar
 
 
 
 
 

Lassen Sie sich über neue Kommentare zu diesem Blogbeitrag informieren


 
RSS
combit Dev BlogRSS
combit Entwicklerblog
Hier teilen wir Informationen über die Entwicklung unserer Softwareprodukte. Außerdem: Allgemeines über die Softwareindustrie.
Archiv
November 2018 (2)
Oktober 2018 (4)
September 2018 (4)
August 2018 (2)
Juli 2018 (2)
Juni 2018 (2)
Mai 2018 (1)
April 2018 (1)
März 2018 (1)
Februar 2018 (2)
Januar 2018 (1)
Dezember 2017 (1)
November 2017 (2)
Oktober 2017 (3)
September 2017 (3)
August 2017 (2)
Juli 2017 (2)
Juni 2017 (1)
Mai 2017 (2)
April 2017 (1)
März 2017 (1)
Ältere Blogposts
Einträge aus dem Zeitraum von März 2014 bis Februar 2017 finden Sie in unserem englischsprachigen Blog.
+49 (0) 7531 90 60 10