Entwickler-Ecke
Datenbanken (inkl. ADO.NET) - eine LINQ Abfrage mit 2 DataContext überhaupt möglich?
Habak - Sa 13.11.10 15:53
Titel: eine LINQ Abfrage mit 2 DataContext überhaupt möglich?
Guten Tag zusammen,
nachdem ich in zwei Fachbüchern und beim "googlen" nicht fündig geworden bin, habe ich folgende Frage:
Kann man überhaupt in einer LINQ-Abfrage zwei DataContext Bezüge verwenden ?
Ich bekomme immer die Fehlermeldung:
"Die Abfrage enthält Verweise auf Elemente, die in einem anderen Datenkontext definiert sind."
Daher nehme ich an, dass funktioniert so nicht.
Was ist denn hier die Alternative ?
Anbei noch der c#-Code:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| RegionenDBDataContext Regio1 = new RegionenDBDataContext(); LänderDBDataContext Länder1 = new LänderDBDataContext(); var ListeLänder = from LL in Länder1.Länder from LR in Regio1.Regionen where LR.GebietID == 99999 select new { LL.Land };
foreach (var Länder in ListeLänder)
{ Console.WriteLine(order.Land); } |
Vielen Dank im voraus.
Habak
Moderiert von
Kha: C#-Tags hinzugefügt
Kha - Sa 13.11.10 16:03
:welcome: in der EE!
Das kann so tatsächlich schlecht funktionieren, an welche der beiden Verbindungen sollte denn die SQl-Query geschickt werden?
Getrennte DCs für zwei abhängige Tabellen ist eine merkwürdige Idee - stehen die denn nicht in der gleichen DB?
Habak - Sa 13.11.10 16:50
Hallo Kha,
es sind zwei Tabellen aus einer Datenbank.
Aus der einen Tabelle muss ich mehrere ID´s filtern und dann als Filter in der anderen Tabelle verwenden.
Wie mache ich das denn ?
Vielen Dank.
Habak
Kha - Sa 13.11.10 17:17
Habak hat folgendes geschrieben : |
| es sind zwei Tabellen aus einer Datenbank. |
Dann gibt es keinen Grund, mehr als einen DC zu verwenden. Und wenn die Foreign-Key-Relationen richtig angelegt werden, gibt es auch keinen Grund, den Join selbst zu bauen, da der Designer
Navigation Properties [
http://msdn.microsoft.com/en-us/library/bb738520.aspx] angelegt haben sollte.
C#-Quelltext
1:
| dc.Länder.Where(l => l.Regionen.Any(r => regionenIDs.Contains(r.ID)) |
Ich hoffe mal, das geht so wirklich durch EF durch :mrgreen: .
Habak - Sa 13.11.10 20:14
Hallo Kha,
vielen Dank, aber das klappt bei mir so leider nicht. Ich darf kein ANY oder ähnliches verwenden, dass wird gleich angemeckert.
Vielleicht darf ich mein Problem in ein paar Worten beschreiben:
In der Datenbank "DokuDB" habe ich eine Tabelle "Gebiete", die folgende Felder ausweist: GebietID und Gebiet (z.B. Europa). Weiterhin gibt es in der Datenbank die Tabelle "Regionen", die die GebietID, eine RegionID und die Regionen (z.B. Mitteleuropa, usw.) beeinhalten. Weiterhin gibt es dann eine Tabelle "Länder", die auch die RegionID, eine Länder ID und die Länder (z.B. für Mitteleuropa: Deutschland, Österreich, etc) beinhalten.
Nun möchte ich folgende Fall lösen:
Wähle ich ein Gebiet aus (z.B. Europa), dann möchte ich gerne alle zugehörigen Länder anzeigen. D.h. für ein Gebiet gibt es mehrere Regionen und diese Regionen muss ich in der Tabelle Länder abfragen.
Wie bekomme ich das in einer Windows-Form-Anwendung umgesetzt?
Vielen Dank.
Habak
P.S.: bin leider von SQL oder Datenbanken völlig unbeleckt (bitte um Verständnis)
Kha - Sa 13.11.10 20:25
Das wäre ja einfach from region in gebiet.Regionen from land in region.Länder select land, wenn wie gesagt die FKs passen. Solltest du noch überhaupt keine Relationen in der DB haben, müsstest du dich in dieser Richtung erst einmal einlesen, eine Erklärung hier würde den Rahmen sprengen :) .
Habak - Sa 13.11.10 20:44
die FK´s habe ich erzeugt; zumindest sehe ich dies im Datenbankdiagramm und unter Datenquelle da dort in der Tabelle Regionen die Tabelle Land (eingerückt) auch "enthalten" ist.
Oder sehe ich das falsch?
Nur wenn ich Deine Abfrage umsetze, gibt es den Teil "region.Länder" nicht; das wird durch das InteliSense nicht angeboten.
Kannst Du sagen was da falsch läuft.
Danke.
Habak
Habak - Sa 13.11.10 21:29
Hallo Kha,
ehrlich gesagt weiss ich nicht, was unter dem "Entity Framework" zu verstehen ist.
Aber ich habe den Fehler nun gefunden: in den "dbml"-Dateien waren die Beziehungen nicht eingetragen (warum man das zig mal an unterschiedlicher Stelle machen muss, bleibt mir ein Geheimnis).
Wenn ich dort nun die Regionen und die Länder Tabelle verknüpfe, dann klappt auch "region.Länder".
Vielen Dank. Du warst eine große Hilfe.
Noch einen schönen Abend.
Gruß Habak
P.S.: Damit wäre das Thema für mich erledigt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!