2016-07-31 20 views
0

zu werfen Ich verstehe, dass es in C# unmöglich ist, aber ich muss es irgendwie tun. Ich habe zwei Klassen, eine Basisklasse für die Liste der Flüge.Kann Basisklasse Objekt nicht zu abgeleiteten Typ Objekt, Entity Framework Code-zuerst

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

Und abgeleitete Klasse für Archivliste der Flüge.

class ArchiveFlight :Flight 
{ 
} 

Hier ist meine DbContext Klasse.

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

Ich muss so etwas tun.

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

Wo flightToclean ist Typ Flight. flights ist ein Typ von FlightsDatabase.

Kann ich dies in Kürze tun oder muss ich neu erstellen ArchiveFlight Objekt und kopieren Sie alle Eigenschaften von Flight Objekt auf neue ArchiveFlight Objekt?

+0

Tippfehler: Es ist ein ** Passagier ** - kein "passanger" –

+0

Sie könnten ArchivFlight die Basisklasse machen. Oder ordnen Sie CUD-Aktionen gespeicherten Prozeduren zu und kopieren Sie in der Löschprozedur eines 'Flight' den gelöschten Flug in die 'ArchiveFlight'-Tabelle. –

Antwort

1

Wenn ich richtig verstanden habe, haben Sie Flight Einheit in Ihrem Kontext, und eine FlightArchive Einheit, und sobald ein Flug fertig ist, möchten Sie diesen Flug in der FlightArchive Sammlung verschieben.

Um dies zu erreichen, wird die beste Lösung sein, FlightArchive Einheit loszuwerden, und Eigenschaft des Typs bool in Flight Modell zu erstellen.

Auf diese Weise können Sie diese Eigenschaft auf True setzen, sobald ein Flug beendet ist (alt). Es wird einfacher für zukünftige Datenmanipulation.

so, in der:

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

dann, wenn der Flug durchgeführt wird, können Sie dies tun:

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

, wenn Sie die Flugliste benötigen: Sie tun können:

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

var flightArchive=_context.Flights.Any(x=>x.FlightArchive).ToList();