2016-07-28 34 views
3

我創建了2個表示數據庫實體的類。如何先在實體框架代碼中創建2個具有相同類型的dbset?

一是實體:

public enum FlightStatus 
{ 
     checkIn, 
     gateClosed, 
     arrived, 
     departedAt, 
     unknown, 
     canceled, 
     expectedAt, 
     delayed, 
     InFlight 
} 

public class Flight 
{ 
     [Key] 
     public string FlightNumber { get; set; } 
     public DateTime Arrival { get; set; } 
     public DateTime Departure { get; set; } 
     public string CityOfArrival { get; set; } 
     public string CityOfDeparture { get; set; } 
     public char Terminal { get; set; } 

     public FlightStatus Status { get; set; } 
     public int Gate { get; set; } 

     public virtual ICollection<Passanger> PassengerList { get; set; } 
     public double PriceForFirstClass { get; set; } 
     public double PriceForBusiness { get; set; } 
     public double PriceForEconom { get; set; } 
} 

二實體:

public enum Sex 
{ 
     M, 
     F 
} 

public enum FlightClass 
{ 
     First, 
     Business, 
     Econom, 
} 

public enum TicketType 
{ 
     OneWay, 
     TwoWay, 
} 

public class Passenger 
{ 
     [Key] 
     public string Passport { get; set; } 
     public string flightNumber { get; set; } 

     [ForeignKey("flightNumber")] 
     public virtual Flight flight { get; set; }  

     public string FirstName { get; set; } 
     public string SecondName { get; set; } 
     public string Nationality { get; set; }  
     public DateTime DateOfbirthday { get; set; } 
     public Sex SexOfPassanger { get; set; } 
     public FlightClass ClassForPassanger { get; set; } 
     public TicketType TypeOfTicket { get; set; } 
} 

然後,我創建了一個DbContext

class FlightsDatabase : DbContext 
{ 
    public DbSet<Flight> Flights { get; set; } 
    public DbSet<Flight> FlightsArchive { get; set; } 

    public DbSet<Passenger> Passengers { get; set; } 
} 

當我嘗試使用此代碼:

using (FlightsDatabase flights = new FlightsDatabase()) 
{ 
    foreach (Flight flight in flights.Flights) 
    { 
     if (Math.Abs((flight.Departure - DateTime.Now).Days) <= 1) 
     { 
      timeCame(flight, null); 
     } 

     if (flight.Departure < DateTime.Now) 
     { 
      flightsToClean.Add(flight); 
     } 
    } 

    moveOldFlights(flightsToClean, null); 
} 

我得到這個錯誤,不支持每個類型

多個對象集。對象集「Flights」和「FlightsArchive」都可以包含「Project_Airline_Info.Models.Flight」類型的實例。

所以我的問題是如何在DbContext類中創建2個具有相同泛型的DBsets。

回答

7

簡短的回答是,你不能這樣做。考慮下面這行代碼:

var flight = context.Set<Flight>().Where(f => f.FlightNumber = "123"); 

它如何知道哪個集合用於獲取數據?

也許最簡單的解決方法是繼承Flight類,並使用您的其他DbSet

public class ArchiveFlight : Flight 
{ 
} 

而且你的背景:

public class FlightsDatabase :DbContext 
{ 
    public DbSet<Flight> Flights { get; set; } 
    public DbSet<ArchiveFlight> FlightsArchive { get; set; } 
    public DbSet<Passanger> Passengers { get; set; } 
} 

這樣做的好處是,你可以現在向您的歸檔航班添加屬性,例如歸檔日期:

public class ArchiveFlight : Flight 
{ 
    public DateTime DateArchived { get; set; } 
} 
+0

我做了這樣的事情,但是當我查看日誌時,當查詢只有一個具有共同基類的DbSet時,EF正在爲數據庫生成兩個查詢。你知道爲什麼嗎? – yosbel

+0

不知道,我不得不看你的代碼/配置甚至猜測。 – DavidG

相關問題