簡體   English   中英

如何在Entity Framework Code-First中創建自定義M2M表

[英]How can I create a custom m2m table in Entity Framework Code-First

希望這是相對簡單的,但是我似乎無法全神貫注於此。

我有一個這樣的POCO:

public class TigerTrailRequiredBadge
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<TigerTrailRequiredBadgeSubRequirement> TigerTrailRequiredBadgeSubRequirements { get; set; }
}

和一個非常類似的這樣:

public class TigerTrailElectiveBadge
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public int Number { get; set; }
    public string Name { get; set; }
    public string Requirement { get; set; }
}

這兩個poco是只有一堆查詢數據的表。 它們是徽章要求的清單。 我現在需要一張桌子來跟蹤人員完成徽章的進度。 因此,我有一個具有以下對象屬性的root用戶對象:

public class Youth
{
    ...
    public virtual YouthCubRequirementsTracker YouthCubRequirementsTracker { get; set; }
    ...
}

那poco看起來像這樣:

public class YouthCubRequirementsTracker
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public bool TigerTrailDone { get; set; }
    public virtual TigerTrailChecklist TigerTrailChecklist { get; set; }
    ...more 'Trail' Checklists ...
}

這把我帶到了我無法弄清楚的地方:TigerTrailChecklist:

public class TigerTrailChecklist
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }
    public List<TigerTrailRequiredBadge> RequiredBadges { get; set; }
    public List<TigerTrailElectiveBadge> ElectiveBadges { get; set; }
}

我希望Tiger Trail清單顯示這種數據(偽sql結果)

Id      FK_ReqBadgeId      FK_ElectiveBadgeID      Complete      CompleteDate
1       42                 null                    true          11-12-13
2       null               13                      true          11-12-14

所以,有幾個問題:

  1. 這是我要完成的目標的好方法嗎?
  2. 如何首先通過代碼完成我要查找的結果?
  3. 我沿着這條路走下去會有什么陷阱嗎? 這只是YouthRequirementTracker類的一部分,總共有四個“尾跡”,因此有4個查找表要加入用戶(表跳之間或兩個表跳之間)

幾個指針:

  1. 您不需要在[Key][DatabaseGenerated(DatabaseGeneratedOption.Identity)]屬性中注釋POCO Id屬性。 按照慣例,實體框架會將Id列視為主鍵,並在運行時自動分配其值。
  2. 據我所知,您的POCO之間沒有定義多對多關系。 (我可能是錯的,但請指出當時的位置)。
  3. 考慮使您的類更通用或使用抽象-您無需為所有四個路徑重復代碼,因為這將增加您需要維護的代碼量。 為什么不只有一個查找表,並為跟蹤名稱增加一列(或者更好的是,為跟蹤創建一個單獨的表並僅引用相應的條目)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM