当前,我正在处理旧的sytem db,这很混乱
在酒店预订系统表中,我们有一个预订表,该表与基于systemid的不同预订系统(例如酒店预订,火车预订)具有一对多的关系
表格-预订
列Reservation_id(int)| System_id(int)| Customer_id |
45432 |可以是1,2,3等| 343 |
例如系统ID 1可以是旅馆,2是火车等。
表格-[系统] _预订系统可以是酒店,火车或飞机
列Reservation_id(int)| create_date(datetime)|其他列
45432 |
当前要加载预订详细信息,我们查询预订表,而不是基于系统ID查询相应的预订系统表。每个预订与预订系统之间可以有0..1 *个关联。
我如何围绕此创建EF mdel构建器。
我尝试了以下
[Table("Hotel_Reservation")]
public class HotelReservation
{
public int Reservation_id { get; set; }
public Virtual Reservation ReservationInfo { get; set; }
//other properties etc
}
[Table("Reservation")]
public class Reservation
{
public Reservation()
{
HotelReservations = new HashSet<HotelReservation>();
TrainReservations = new HashSet<TrainReservation>();
}
public int Reservation_id { get; set; }
public int SystemID { get; set; }
public virtual ICollection<HotelReservation> HotelReservations { get; set; }
public virtual ICollection<TrainReservation> TrainReservations { get; set; }
//other properties etc
}
//On model builder class contains
Builder.Entity<TrainReservation>()
.HasOptional(x => x.ReservationInfo)
.WithMany(x => x.TrainReservations )
.HasForeignKey(x => x.Reservation_id);
但是在初始化时出现以下错误 多重性与角色中的引用约束冲突。..由于从属角色中的所有属性都是不可为空的,因此主要角色的多重性必须为'1'。
答案 0 :(得分:2)
这看起来大致像是使用每个类型表的继承模型,但是System_Id看起来更像是尝试每个层次表的尝试。如果子类表(Hotel_Reservation等)拥有一个保留ID,那么您应该能够将其映射为“每种类型的表”,而在关系映射中完全忽略SystemId。本质上,您希望将Reservation作为具有扩展其特定保留类型的基类。从那里,您应该能够查询特定的预订类型或基本预订。
这概述了如何在EF中建立关系以及其他继承数据结构映射,包括每个层次的表。