我知道在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);
flightToclean
的类型为Flight
。 flights
的类型为FlightsDatabase
。
我可以很快执行此操作,还是需要创建新的ArchiveFlight
对象并将Flight
对象的所有属性复制到新的ArchiveFlight
对象?
答案 0 :(得分:1)
如果我理解正确,您的上下文中有Flight
个实体,并且FlightArchive
实体有一个FlightArchive
实体,一旦完成航班,您就想在FlightArchive
集合中移动该航班。
要实现这一点,最好的解决方案是摆脱bool
实体,并在Flight
模型中创建 public class Flight
{
...
public bool FlightArchive {get;set;}
}
类型的属性。
通过这种方式,您可以在航班完成后将该属性设置为true(旧)。 未来的数据操作将更容易。
所以,在你的:
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();
当您需要航班列表时:您可以:
{{1}}