2011-01-14 7 views
0

Ich versuche einfach, Daten von zwei SQL-Server-DB-Tabellen mit ado.net Entity Framework zu erhalten. Mein Code ist:Versuchen, Tabellen von SQL-Datenbank mit Entity-Framework-Targeting .net 3.5 Websites zu durchqueren

using (Model.Entities e = new Model.Entities()) 
    { 
     return e.PAGE.First().CONTROL; 
    } 

Die Datenbank-Setup ist zwei Tabellen zu haben, eine Steuertabelle, die in den Tabellen über ein ‚id‘ Feld auf eine Seitentabelle verknüpft (control_id). Für jedes PAGE-Objekt gibt es ein CONTROL-Objekt.

Ich bekomme immer einen Nullwert für meinen Rückgabewert und ich weiß, das ist nicht richtig.

Ich kann vis Studio und Haltepunkte verwenden, um zu sehen, dass es ein PAGE-Objekt in 'e' gibt und ich sehe, dass es mehrere CONTROL-Objekte in 'e' gibt. Dies ist keine große Datenbank, ich habe nur einige Beispieldaten, um sicherzustellen, dass ich das funktioniere - daher weiß ich, dass ein CONTROL-Objekt mit dieser Seite verbunden sein sollte (ich habe dies über SQL Server verifiziert).

Ich bin sehr vertraut mit der allgemeinen Code-Syntax, ich habe LINQ seit ein paar Jahren verwendet; Allerdings habe ich nicht viel Arbeit mit dem Entity-Framework oder ado.net 4.

getan Es scheint wie wenn ich nur einzelne Tabellendaten ziehen dann funktioniert es gut (ieePAGE.First() .. oder .. e.CONTROL.Where (x => x.someValue.Equals ('someValue')) Aber wenn ich versuche, durch die Tabellen zu ziehen, bekomme ich nichts zurück (0)

Hoffe, dass alles einen Sinn ergibt.

Antwort

1

Einige Fragen für Sie:

  • ich gehe davon ist eine 1..1 zwischen PAGE und CONTROL,
  • Gibt es eine FK namens "ControlID" auf PAGE?
  • Haben Sie eine Navigationseigenschaft namens "Control" auf Ihrer Entität "Page" in Ihrem EDMX?

Wenn die Antwort auf alle der oben genannten ist ja, dann sollte diese Arbeit:

var page = e.Pages.Include("Control").First(); 

Hier legen Sie den ersten „Seite“ Datensatz zurückkehren und eifrig Laden die zugehörigen Steuerung.

Die SQL erzeugt sollte wie folgt sein:

SELECT p.*, c.* 
FROM Page p 
INNER JOIN Control c 
on p.ControlId = c.ControlId 
+1

Danke. Genau wonach ich gesucht habe! – Adam