2016-07-31 82 views
0

我明白在C#中這是不可能的,但我需要以某種方式做到這一點。我有兩個班級,航班列表的基礎班。無法將基類對象轉換爲派生類型對象,實體框架代碼優先

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<Passenger> Passengers { get; set; } 

     public double PriceForFirstClass { get; set; } 
     public double PriceForBusiness { get; set; } 
     public double PriceForEconom { get; set; } 
} 

和派生類航班歸檔列表。

class ArchiveFlight :Flight 
{ 
} 

這是我DbContext類。

class FlightsDatabase : DbContext 
{ 
     protected override void OnModelCreating(DbModelBuilder builder) 
     { 
      builder.Entity<Flight>().HasMany(x => x.Passengers). 
       WithOptional(x => x.Flight).HasForeignKey(x => x.flightNumber).WillCascadeOnDelete(true); 
     } 

     public DbSet<Flight> Flights { get; set;} 
     public DbSet<ArchiveFlight> FlightsArchive { get; set; } 
     public DbSet<Passenger> Passengers { get; set; } 
    } 
} 

我需要做這樣的事情。

flights.FlightsArchive.Add((ArchiveFlight)flightToclean); 
flights.Flights.Remove(flightToclean); 

其中flightTocleanFlight的類型。 flightsFlightsDatabase的類型。

我可以很快做到這一點嗎?或者是否需要創建新的ArchiveFlight對象並將Flight對象的所有屬性複製到新的ArchiveFlight對象?

+0

錯字提醒:這是**乘客** - 不是「passanger」 –

+0

您可以將'ArchiveFlight'作爲基類。或者將CUD操作映射到存儲過程和「Flight」的刪除過程中,將已刪除的航班複製到「ArchiveFlight」表中。 –

回答

1

如果我理解正確,您的上下文中有Flight實體,並且實體有FlightArchive實體,並且一旦航班完成,您想要在FlightArchive集合中移動該航班。

爲了達到此目的,最好的解決方案將是擺脫FlightArchive實體,並在Flight模型中創建bool類型的財產。

以這種方式,您可以將該屬性設置爲true,一旦航班完成(舊)。 未來的數據處理將更加容易。

所以,在你的:

public class Flight 
    { 
      ... 
    public bool FlightArchive {get;set;} 
    } 

然後,當飛行完成後,你可以這樣做:

var flight=_context.Flights.Find(flightId); 
flight.FlightArchive =true; 

,當你需要的飛行名單:你可以這樣做:

var flightList=_context.Flights.Any(x=>!x.FlightArchive).ToList() 

var flightArchive=_context.Flights.Any(x=>x.FlightArchive).ToList(); 
相關問題