2016-07-31 6 views
0

C#では不可能であると私は理解していますが、何とかする必要があります。私は2つのクラス、飛行のリストのための基本クラスを持っています。基本クラスオブジェクトを派生型オブジェクト、Entity Frameworkコードファーストにキャストできません

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; } 
    } 
} 

私はこのようなことをする必要があります。

flightTocleanFlightのタイプである
flights.FlightsArchive.Add((ArchiveFlight)flightToclean); 
flights.Flights.Remove(flightToclean); 

flightsのタイプはFlightsDatabaseです。

すぐにこれを行うことができますか、新しいArchiveFlightオブジェクトを作成し、Flightオブジェクトのすべてのプロパティを新しいArchiveFlightオブジェクトにコピーする必要がありますか?

+0

Typoアラート:**乗客** - "passanger"ではありません –

+0

'ArchiveFlight'を基本クラスにすることができます。または、CUDアクションをストアドプロシージャにマップし、 'Flight'の削除プロシージャで、削除されたフライトを' ArchiveFlight'テーブルにコピーします。 –

答えて

1

私が正しく理解していれば、あなたの文脈にはFlightエンティティがあり、FlightArchiveエンティティがあり、フライトが完了するとそのフライトをFlightArchiveコレクションに移動したいと考えています。

これを実現するには、FlightArchiveエンティティを取り除き、タイプboolのプロパティをFlightモデルで作成するのが最善の解決策です。

この方法で、フライトが完了すると(以前の)このプロパティを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(); 
関連する問題