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; }
}
}
私はこのようなことをする必要があります。
flightToclean
は
Flight
のタイプである
flights.FlightsArchive.Add((ArchiveFlight)flightToclean);
flights.Flights.Remove(flightToclean);
。 flights
のタイプはFlightsDatabase
です。
すぐにこれを行うことができますか、新しいArchiveFlight
オブジェクトを作成し、Flight
オブジェクトのすべてのプロパティを新しいArchiveFlight
オブジェクトにコピーする必要がありますか?
Typoアラート:**乗客** - "passanger"ではありません –
'ArchiveFlight'を基本クラスにすることができます。または、CUDアクションをストアドプロシージャにマップし、 'Flight'の削除プロシージャで、削除されたフライトを' ArchiveFlight'テーブルにコピーします。 –