2017-03-08 63 views
0

我先使用代碼,並有幾個具有導航屬性的類。更新與相同類型的關係的導航屬性?

問題類別:

public class Issue 
{ 
    public Issue() 
    { 
     Complaints = new List<Complaint>(); 
     SubIssues = new List<Issue>(); 
    } 
    [Key,ForeignKey("Complaints")] 
    public int IssueID { get; set; } 
    public string Name { get; set; } 
    public bool IsSubCategory { get; set; } 
    public virtual Issue ParentIssue { get; set; } 
    public virtual ICollection<Issue> SubIssues { get; set; } 
    public virtual ICollection<Complaint> Complaints { get; set; } 
} 

投訴類:

public class Complaint 
{ 
    public Complaint() 
    { 
     CreateDate = DateTime.Now; 
    } 
    public int ComplaintID { get; set; } 
    public DateTime CreateDate { get; set; } 
    [MaxLength(2000)] 
    public string Description { get; set; } 
    public bool IsClosed { get; set; } 
    [ForeignKey("IssueID")] 
    public virtual Issue Issue { get; set; } 
    public int IssueID { get; set; } 
} 

投訴類是工作的罰款。我遇到困難的地方是問題類別,它引用了子表ParentIssue。這個想法是,每個IsSubCategory == False的Issue記錄可以有多個相關的Issue記錄作爲SubIssues的集合,每個IsSubCategory == true的Issue記錄與ParentIssue的Issue記錄具有1對1的關係。

因爲一些DBA標準我還需要指定的外鍵字段的命名,即ParentIssueID而非Issue_ParentIssueID(或不管它自動一族)

我寧願用數據說明這樣做,但可能如果需要的話,使用OnModelCreating過程。

我該如何解決問題類以便創建正確的表?

回答

1

IssueID不能同時是主鍵和外鍵。你需要一個屬性(和字段)ParentIssueId

public int? ParentIssueID { get; set; } 

的映射,如果用流利的映射,應該是這樣的:

modelBuilder.Entity<Issue>() 
      .HasMany(i => i.SubIssues) 
      .WithOptional(i => i.ParentIssue) 
      .HasForeignKey(i => i.ParentIssueID); 

ParentIssueIDint?,因爲它是一個可選的關係。