我需要在用户对象和许多查找表之间建立一个相对复杂的关系。用户对象是您运行的磨机用户模型:
public class Youth : IAuditInfo
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public Guid YouthGuid { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Address Address { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
public string ImageName { get; set; }
[ForeignKey("FkYouthId")]
public ICollection<User> Parents { get; set; }
public CubPack Pack { get; set; }
public virtual ICollection<RequirementsLog> RequirementsLogs { get; set; }
public Youth()
{
Parents = new List<User>();
}
}
查找表是它变得复杂的地方,我无法找出将它们绑定在一起的最简单的路径。对于查找,它是从一个“主”表开始的一系列表,按层次结构向下滚动到需求和子需求,如下所示:
掌握:
public class BearTrail
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public virtual ICollection<BearTrailRequiredBadge> BearTrailRequiredBadges { get; set; }
public virtual ICollection<BearTrailElectiveBadge> BearTrailElectivedBadges { get; set; }
}
所需徽章:
public class BearTrailRequiredBadge
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Name { get; set; }
public int Number { get; set; }
public string Description { get; set; }
public virtual ICollection<BearTrailRequiredBadgeSubRequirement> BearTrailRequiredBadgeSubRequirements { get; set; }
}
所需徽章子要求:
public class BearTrailRequiredBadgeSubRequirement
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public string Number { get; set; }
public string Text { get; set; }
public bool Required { get; set; }
}
这是一组查找,大约有四个这样的嵌套类,还有一些是表外的。总查找表大约是 16 个,给予或接受。
我最初在考虑是否使用我的 RequirementLog 模型来绑定它:
public class RequirementsLog
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public virtual ICollection<Youth> Youth { get; set; }
public BearTrail BearTrailRequirements { get; set; }
public TigerTrail TigerTrailRequirements { get; set; }
public WolfTrail WolfTrailRequirements { get; set; }
public WebelosTrail WebelosTrailRequirements { get; set; }
public WebelosArrowOfLight WebelosArrowOfLightRequirements { get; set; }
}
因此,RequirementsLog 和 Youth 之间存在多对多。根据RequirementsLog 创建的表有一个PK 列(ID),每个属性都有一个FK 列。由此创建的多对多表(RequirementsLogYouths)有两个PK(RequirementsLogId 和YouthId)。
我会以正确的方式解决这个问题吗?最终目标是让 16 个左右的表服务器作为各种要求的列表,并有另一个表来跟踪特定年轻人通过要求的进度。我很难想象这些 DBA 的一些东西,所以任何输入都将不胜感激。