2014-01-29 94 views
0

嗨,我一直在四處搜尋,現在試圖找出如何做到這一點,我沒有任何運氣。我正在用ASP.NET創建一個論壇應用程序。 MVC5和EF6。我的應用包含評論模型;這是我開始遇到問題的地方。我希望線程能夠有評論(這很容易),我也想評論有評論(這是我的問題)。具有相同實體類型的外鍵的表格

這裏是我的模型是如何定義的:

namespace Forum.Models 
    { 
     public class Comment 
     { 
      [Key] 
      public int Id {get; set;} 
      [DisplayFormat(DataFormatString = "{0:d/M/yyyy HH:mm:ss}",   
      ApplyFormatInEditMode = true)] 
      public DateTime TimeStamp { get; set; } 

      public string Content { get; set; } 

      public String UserId { get; set; } 

      public virtual ICollection<Comment> Comments { get; set; } 

      [ForeignKey("ParentComment")] 
      public int ParentCommentId { get; set; } 
      public virtual Comment ParentComment { get; set; } 

      public int ThreadId { get; set; } 
      public virtual Thread Thread {get; set;} 
     } 
    } 

這是我的錯誤,當我嘗試更新此表:

不能插入表格「評論爲標識列顯式值'當IDENTITY_INSERT設置爲OFF時。

任何幫助將不勝感激。

+1

你是什麼意思與 「*當我嘗試更新此表*」? 「更新」=更新此表中的記錄(或甚至插入記錄)?或者更新表模式(遷移?)?作爲一個方面說明:我認爲'ParentCommentId'應該可以爲空('int?'),因爲你肯定會有沒有父母的評論,就像對線程的第一個評論。 – Slauma

+0

@Slauma對不起。具體而言,我正在討論創建新評論並將其添加到數據庫中。所以,插入一個新的行。是的,我同意你關於int ?. – rocktheartsm4l

回答

0

我同意@Slauma,您需要將ParentCommentId更改爲int?類型。此外,如果你想使用ForeignKeyAttribute,你需要指定它來組合導航性能,象下面這樣:

public int? ParentCommentId { get; set; } 

[ForeignKey("ParentCommentId")] 
public virtual Comment ParentComment { get; set; } 

下面是一個例子,我用流利的API來配置的關係。

Coment模型類:

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

    [DisplayFormat(DataFormatString = "{0:d/M/yyyy HH:mm:ss}",ApplyFormatInEditMode = true)] 
    public DateTime TimeStamp { get; set; } 

    public string Content { get; set; } 

    public String UserId { get; set; } 

    public virtual ICollection<Comment> Comments { get; set; } 

    public int? ParentCommentId { get; set; } 

    public virtual Comment ParentComment { get; set; } 

    public int ThreadId { get; set; } 
    public virtual Thread Thread { get; set; } 
} 

DbContext類:

public class YourDbContext : DbContext 
{ 
    public DbSet<Comment> Comments { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
     modelBuilder.Entity<Comment>() 
      .HasOptional(c => c.ParentComment) 
      .WithMany(c => c.Comments) 
      .HasForeignKey(c => c.ParentCommentId); 
     } 
} 
+0

感謝您的快速回復。當我明天回到我的另一臺計算機時,我會試試這個。我沒有看到太多流暢的API,所以我在這裏閱讀,[鏈接](http://msdn.microsoft.com/en-us/data/jj591617.aspx)。我在想,如果你有什麼時候使用流利的api和何時註釋足夠的建議? – rocktheartsm4l

+0

hi @ rocktheartsm4l,通過Fluent API,您也可以使用DataAnnotations配置所有內容。從配置選項和靈活性的角度來看,Fluent API是「更好的」。 – Lin

相關問題