2016-05-13 4 views
3

Ich muss alle Plätze zu einer bestimmten Reservierung zugeordnet werden.Holen Sie Datensätze über Fremdschlüssel in einer anderen Tabelle in Entity Framework 6

Ich habe diese Klassen:

public class Seat 
{ 
    public Guid Id { get; set; } 
    public string RowNumber { get; set; } 
    public int SeatNumber { get; set; } 
} 

public class ReservationSeat 
{ 
    public Guid Id { get; set; } 
    public Guid ReservationId { get; set; } 
    public Guid SeatId { get; set; } 

    public Reservation Reservation { get; set; } 
    public Seat Seat { get; set; } 
} 

ich mit dieser Linq zu Entitäten Aussage versucht, aber ohne Glück. Es scheint alle Sitze vom Sitztisch zurück zu geben.

public static List<Seat> GetSeatsForReservation(Guid reservationId) 
{ 
    using (var db = new EntityContext()) 
    { 
     return db.Seats.Where(s => db.ReservationSeat 
            .Select(rs => rs.ReservationId) 
            .Contains(reservationId)).ToList(); 
    } 
} 

Antwort

5

Versuchen:

public static List<Seat> GetSeatsForReservation(Guid reservationId) 
    { 
     var db= new EntityContext(); 
     return (from s in db.ReservationSeat 
       where s.ReservationID==Guid 
       select s.seat).ToList(); 
    } 
+1

Danke .. ich habe es zu arbeiten und drehte es in dieser Aussage: 'zurück db.ReservationSeat.Where (rs => rs.ReservationId == reservationId) .Wählen (rs => rs.Seat) .ToList(); ' –

+0

Ich werde ehrlich sein, ich bekomme immer noch nicht das" => ". Also benutze ich den langen Weg die ganze Zeit – Aimnox

0

Sie überprüfen nicht die Variable in Ihrem Prädikat. Sie fragen die DB im Grunde nach jeder Zeile, in der "irgendeine Reservation Zeile in der Datenbank mit der ID übereinstimmt". Da es immer eine Übereinstimmung gibt, werden alle Zeilen in diesem Prädikat auf true ausgewertet.

Es klingt wie Sie nach etwas mehr wie folgt aussehen:

.Where(s => s.Reservation.Id == reservationId) 
0

In EF-Code-First ForeignKey können Eigenschaften einer Klasse und Standard angewendet werden Code-First-Konvention für ForeignKey-Beziehung erwartet, dass der Name des Fremdschlüssel-Property mit der Primärschlüssel-Eigenschaft übereinstimmt. So können Sie erstellen Sie als Gebrüll Modell:

public class Seat 
{ 
    public Guid Id { get; set; } 

    public string RowNumber { get; set; } 

    public int SeatNumber { get; set; } 

    public virtual ICollection<Reservation> Reservations { get; set; } 
} 

public class Reservation 
{ 
    public Guid Id { get; set; } 

    public virtual ICollection<Seat> Seats { get; set; } 
} 

public static List<Seat> GetSeatsForReservation(Guid reservationId) 
{ 
    List<Seat> result = null; 
using (var db = new EntityContext()) 
    { 
    result = db.Seats.Where(
      s => s.Reservations.Id == reservationId).ToList(); 
    } 
    return result ; 
}` 

Anmerkung: 1. Das ist viele zu viele Beziehung, können Sie es auf 1 bis viele 2. Navigationseigenschaft ändern muss als public deklariert werden, virtuelle

Verwandte Themen