Code First设计3个表(一对一)

时间:2015-04-10 01:37:35

标签: entity-framework database-design ef-code-first

我正在尝试创建一个数据库,用于跟踪正在邮寄的包裹。我一直试图找出在任何给定时间/日期实现包裹与其位置之间关系的最佳方法。最后,我需要能够查看过去的任何时刻,并告诉您包裹在哪里以及在什么时间/日期。当它进入某个位置时,以及它离开某个位置时。

我有三张桌子。 (缩写为基础)

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(包裹)。

我是否以正确的方式进行此操作?任何想法/指导都将不胜感激。

1 个答案:

答案 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的多对多关系的更多信息:

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/