Devo ottenere tutti i posti assegnati ad una prenotazione specifica.
Ho queste classi:
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; }
}
Ho provato con questo linq alla dichiarazione di entità ma senza fortuna. Sembra di restituire tutti i posti dal tavolo dei posti.
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();
}
}
Provare:
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();
}
Nel codice EF, è possibile applicare First ForeignKey alle proprietà di una classe e la convenzione Code-First predefinita per la relazione ForeignKey prevede che il nome della proprietà della chiave esterna corrisponda alla proprietà della chiave primaria. Quindi, puoi creare il tuo modello come muggito:
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 ;
}`
Nota: 1. questa è una relazione molte a molte, è possibile modificarla da 1 a molte 2. La proprietà di navigazione deve essere dichiarata come pubblica, virtuale