如何首先在Entity Framework代码中创建2个具有相同类型的dbset?

法拉第敌人

我创建了2个代表数据库实体的类。

第一实体:

public enum FlightStatus
{
        checkIn,
        gateClosed,
        arrived,
        departedAt,
        unknown,
        canceled,
        expectedAt,
        delayed,
        InFlight
}

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<Passanger> PassengerList { get; set; }
        public double PriceForFirstClass { get; set; }
        public double PriceForBusiness { get; set; }
        public double PriceForEconom { get; set; }
}

第二实体:

public enum Sex
{
        M,
        F
}

public enum FlightClass
{
        First,
        Business,
        Econom,
}

public enum TicketType
{
        OneWay,
        TwoWay,
}

public class Passenger
{
        [Key]
        public string Passport { get; set; }
        public string flightNumber { get; set; }

        [ForeignKey("flightNumber")]
        public virtual Flight flight { get; set; }      

        public string FirstName { get; set; }
        public string SecondName { get; set; }
        public string Nationality { get; set; }       
        public DateTime DateOfbirthday { get; set; }
        public Sex SexOfPassanger { get; set; }
        public FlightClass ClassForPassanger { get; set; }
        public TicketType TypeOfTicket { get; set; }
}

然后我创建了一个DbContext

class FlightsDatabase : DbContext
{
    public DbSet<Flight> Flights { get; set; }
    public DbSet<Flight> FlightsArchive { get; set; }

    public DbSet<Passenger> Passengers { get; set; }
}

当我尝试使用此代码时:

using (FlightsDatabase flights = new FlightsDatabase())
{
    foreach (Flight flight in flights.Flights)
    {
        if (Math.Abs((flight.Departure - DateTime.Now).Days) <= 1)
        {
            timeCame(flight, null);
        }

        if (flight.Departure < DateTime.Now)
        {
            flightsToClean.Add(flight);
        }
    }

    moveOldFlights(flightsToClean, null);
}

我得到这个错误

每个类型不支持多个对象集。对象集“ Flights”和“ FlightsArchive”都可以包含“ Project_Airline_Info.Models.Flight”类型的实例。

因此,我的问题是如何在DbContext类中创建具有相同泛型的2个DBset。

戴维

简短的答案是您无法执行此操作。考虑以下代码行:

var flight = context.Set<Flight>().Where(f => f.FlightNumber == "123");

它如何知道要使用哪个集合来获取数据?

可能最简单的解决方法是继承Flight该类并将其用于您的其他类DbSet

public class ArchiveFlight : Flight
{
}

和您的上下文:

public class FlightsDatabase :DbContext
{
    public DbSet<Flight> Flights { get; set; }
    public DbSet<ArchiveFlight> FlightsArchive { get; set; }
    public DbSet<Passanger> Passengers { get; set; }
}

这样做的好处是,您现在可以将属性添加到已存档的排期中,例如存档日期:

public class ArchiveFlight : Flight
{
    public DateTime DateArchived { get; set; }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何首先在Entity Framework代码中为Identity主键设置起始值?

首先在Entity Framework代码中链接子表

如何首先在Entity Framework Core 2.0代码中按类型继承创建Table?

如何首先在代码中保存外键的集合

如何首先在Wicket中呈现<meta>标签?

如何从首先在php中重新启动循环

如何首先在ASP.NET MVC中将Identity与Entity Framework数据库一起使用

如何首先在asp.net核心中的代码中创建关系

EF例外,如何首先在C#和实体框架代码中为地址建模

如何首先在实体框架代码中的 linq 中使用可为空列表?

如何首先在EF6代码中设置唯一属性

如何首先在EF代码中建立模型与枚举之间的多对多关系?

如何首先在 UI 中显示 JSON 对象中的最后一个属性

如何使用VBA附加所有工作表但首先在电子邮件中

如何首先在Node.js中执行所有控制台日志?

如何控制首先在ggplot2中绘制哪个因子?

首先在同一张表中启用Entity Framework 5代码中的多对多

如何首先在代码中使用迁移添加计算列?

如何首先在Firebase中发送电子邮件验证,然后创建帐户?

首先在哪里可以找到Entity Framework 4.0代码中的.csdl,.ssdl和.msl文件?

如何在Windows 10中更改homepath变量以首先在cmd中查看目录

AWS Lambda:如何使用必须首先在linux中安装的工具?

如何首先在 Xamarin.Android 中以编程方式连接到特定的 SSID?

如何首先在代码中获得具有外键关系的子实体中的父实体属性?

如何首先在实体框架6代码中创建可为空的一对多关系

首先在EF代码中删除列

如何首先在代码中定义两个实体之间的多对多和一对多关系?

替换所有捕获的组,但首先在 sed 中

如何在首先在本地创建后添加一个 git repo 作为子模块