嗨,我一直在寻找40分钟,现在试图弄清楚如何做到这一点,我没有运气。我正在用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时,无法在表'Comments'中为identity列插入显式值。
非常感谢任何帮助。
答案 0 :(得分:0)
我同意@Slauma,您需要将ParentCommentId
更改为int?
类型。此外,如果要使用ForeignKeyAttribute,则需要将其分配给navagation属性,如下所示:
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 );
}
}