Ich möchte das Entity 4 Framework in meine Anwendung integrieren. Ich habe auch schon einige bausteine fertig. Jetzt hänge ich aber an folgendem Problem.
Meine Abfrage direkt über SQL
SELECT DISTINCT D.ID, D.Name, D.CreateDate, D.UpdateDate, D.Active FROM Domain AS D LEFT JOIN dbo.Domain2Host AS D2H ON (D.ID = D2H.FK_DomainID) LEFT JOIN dbo.Host AS H ON (D2H.FK_HostID = H.ID) LEFT JOIN dbo.Host2IP AS H2I ON (H.ID = H2I.FK_HostID) LEFT JOIN dbo.IP ON (H2I.FK_IPID = IP.ID) WHERE IP.Address LIKE @IPAddres
Mein erster versuch mit EF4 verusacht leider 3 Abfragen ich hätte gerne eine mit Joins...
Mein zweiter versucht Das macht auch nicht was ich möchte :(
var query = from ip in entities.IP join domain in entities.Domain on ip.Host.FirstOrDefault() equals domain.Host.FirstOrDefault() where ip.Address == "74.125.87.99" select domain;
Gibt es die möglichkeit das mit Joins zu lösen mit EF4?
Eine vage Vermutung: Es liegt vielleicht an den First() und FirstOrDefault() calls. Du kannst deinen ursprünglichen Join auch ohne abbilden. Im SQL benutzt dus ja auch nicht.
Schon klar eine n:m relation wird ja auch zu einer asaoziation Zweier Klassen aufgelöst ;) Optimiere einfach dahingehend dass die First() calls rausfliegen damit zwingst du linq auch nicht Daten abzuholen
So jetzt hab ich die Lösung zum Problem, leider erstellt VS2010 die Relation Tabellen nicht wenn sie nur ForeignKeys enthaltet. Habe jetzt einfach eine zusätzliche spalte in der Relation Tabelle erstellt. Somit sind die Relation Tabellen auch Sichtbar und ich kann sie mit joins verbinden.
var query = from domain in this.bll.entities.Domain join d2h in this.bll.entities.Domain2Host on domain.ID equals d2h.FK_DomainID join h2i in this.bll.entities.Host2IP on d2h.FK_HostID equals h2i.FK_HostID join ip in this.bll.entities.IP on h2i.FK_IPID equals ip.ID where ip.Address == IPAddress select domain;
Du kannst deinen ursprünglichen Join auch ohne abbilden. Im SQL benutzt dus ja auch nicht.