我正在尝试创建一个数据库,用于跟踪正在邮寄的包裹。我一直试图找出在任何给定时间/日期实现包裹与其位置之间关系的最佳方法。最后,我需要能够查看过去的任何时刻,并告诉您包裹在哪里以及在什么时间/日期。当它进入某个位置时,以及它离开某个位置时。
我有三张桌子。 (缩写为基础)
public class Parcel
{
public int ParcelID { get; set; }
public virtual Location Location { get; set; }
}
public enum LocationType
{
Warehouse, Truck
}
public class Location
{
[Key, ForeignKey("Parcel")]
public int ParcelID { get; set; }
public LocationType LocationType { get; set; }
public virtual Parcel Parcel { get; set; }
}
LocationTimeDate
{
}
我不确定如何将LocationTimeDate与Location相关联。我认为这应该是一对一的关系。所以我必须有LocationId。但位置的密钥是ForeignKey(包裹)。
我是否以正确的方式进行此操作?任何想法/指导都将不胜感激。
答案 0 :(得分:0)
对我来说,这是一个与其他信息(位置,时间和包裹)的多对多关系的好例子。包裹可以有许多位置(在不同的时间),并且一个位置可能属于许多地块(在不同的时间)。我希望我能正确理解你。
这是我建议的设计:
public class Parcel
{
public int ParcelId { get; set; }
public List<ParcelAssignment> ParcelAssignments { get; set; }
}
public class Location
{
[Key]
public int LocationId { get; set; }
public LocationType LocationType { get; set; }
public List<ParcelAssignment> ParcelAssignments { get; set; }
}
public enum LocationType
{
Warehouse, Truck
}
public class ParcelAssignment
{
[Key]
public int ParcelAssignmentId { get; set; }
[Required]
public int LocationId { get; set; }
[ForeignKey("LocationId")]
public Location Location { get; set; }
[Required]
public int ParcelId { get; set; }
[ForeignKey("ParcelId")]
public Parcel Parcel { get; set; }
public DateTime DateOfAssignment { get; set; }
}
您的流畅api将转到您的dbcontext类:
modelBuilder.Entity<ParcelAssignment>()
.HasRequired(pa => pa.Parcel)
.WithMany(p => p.ParcelAssignments)
.HasForeignKey(pa => pa.ParcelId);
modelBuilder.Entity<ParcelAssignment>()
.HasRequired(pa => pa.Location)
.WithMany(l => l.ParcelAssignments)
.HasForeignKey(pa => pa.LocationId);
您可以在此处阅读有关EF的多对多关系的更多信息: