表单标签将什么传递给背后的代码

时间:2019-02-08 00:02:33

标签: .net-core primary-key

在我正在处理的应用程序中,允许用户添加评论。但是,将注释尝试保存到数据库时出现错误。错误说...

  

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; }

}

1 个答案:

答案 0 :(得分:0)

因此,我最终只是删除了数据库表和迁移,并经历了重新创建它们的过程。我正在生产中,所以没什么大不了的。即使我要添加注释,该应用程序现在也可以正常运行。

我认为问题是由于我在数据库上下文中添加了另一个表,并且没有正确进行迁移。

为了记录,我的代码毕竟是正确的。迁移是问题所在。