3 个表的代码优先设计(一对一)

Code First design for 3 tables (one-to-one)

我正在尝试创建一个数据库来跟踪正在邮寄的包裹。我一直在尝试找出在任何给定 time/date 处实现地块与其位置之间关系的最佳方法。最终,我需要能够查看过去的任何时刻并告诉您包裹在哪里以及在什么地方time/date。什么时候进入,什么时候离开。

我为此准备了三个表格。 (缩写为基础知识)

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。但是 Location 的 Key 是 ForeignKey (Parcel)。

我这样做的方式正确吗?任何 thoughts/guidance 将不胜感激。

对我来说,这是具有附加信息(位置、时间日期和包裹)的多对多关系的一个很好的例子。宗地可以有多个位置(在不同的时间),一个位置可能属于多个宗地(在不同的时间)。希望我理解正确。

这是我建议的设计:

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 class:

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 上的多对多关系:

https://practiceaspnet.wordpress.com/2015/03/25/understanding-many-to-many-relationships-in-entity-framework-part-i/

https://practiceaspnet.wordpress.com/2015/03/25/understanding-many-to-many-relationships-in-entity-framework-part-ii/