在我正在处理的应用程序中,允许用户添加评论。但是,将注释尝试保存到数据库时出现错误。错误说...
SqlException:当IDENTITY_INSERT设置为OFF时,无法在表'Comments'中为标识列插入显式值。
DbUpdateException:更新条目时发生错误。有关详细信息,请参见内部异常。
数据库应该自动生成主键,但是由于某种原因,注释模型正在将Comment.ID
(这是主键)分配给当前项目ID(即{{1}) })用户正在评论。需要发生的是应用程序应允许数据库分配主键/ Submission.ID
。
有人可以告诉我为什么应用程序设置了主键吗?
查看
Comment.ID
控制器
<form method="post" class="col-12">
<input type="text" class="form-control" name="Body" placeholder="Add Comment" />
<input type="submit" class="btn btn-primary btn-sm my-2 float-right" />
</form>
模型
public async Task<IActionResult> OnPostAsync(int id)
{
if (!ModelState.IsValid)
return Page();
// Adding values to fields automatically. These fields are not on the form for users to see and update.
Comment.SubmissionID = Submission.ID;
Comment.CreatedBy = "Andre";
Comment.CreatedAt = DateTime.Now;
_SubmissionContext.Comments.Add(Comment);
await _SubmissionContext.SaveChangesAsync();
return RedirectToPage("ProjectDetails", new { ID = id });
}
迁移类
public class Comment
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public int SubmissionID { get; set; }
public Submission Submission { get; set; }
[Column(TypeName = "text")]
public string Body { get; set; }
public string CreatedBy { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:g}")]
public DateTime CreatedAt { get; set; }
}
答案 0 :(得分:0)
因此,我最终只是删除了数据库表和迁移,并经历了重新创建它们的过程。我正在生产中,所以没什么大不了的。即使我要添加注释,该应用程序现在也可以正常运行。
我认为问题是由于我在数据库上下文中添加了另一个表,并且没有正确进行迁移。
为了记录,我的代码毕竟是正确的。迁移是问题所在。