如何防止控制器向数据库发送标识列

时间:2017-05-04 09:51:49

标签: asp.net sql-server entity-framework razor asp.net-mvc-5

控制器操作:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult New_Shelf(Shelf shelf)
    {
        shelf.User_Id = int.Parse(Request.Cookies["UserId"].Value);
        db_shelf.Shelves.Add(shelf);

            db_shelf.SaveChanges();

        return RedirectToAction("Index", "Home");
    }

型号:

namespace Book_shelf.Models
{
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;


public partial class Shelf
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int Id { get; set; }
        public string Name { get; set; }
        public int Size { get; set; }
        [ForeignKey("Id")]
        public int User_Id { get; set; }
    }
}

查看:

 @model Book_shelf.Models.Shelf

 @using (Html.BeginForm("New_Shelf", "Home", FormMethod.Post))
            {
                @Html.AntiForgeryToken()
                @Html.ValidationSummary(true)

                <label style="font-family:sans-serif">Name</label>
                <br />
                @Html.TextBoxFor(a => a.Name)
                <br />
                <br />
                <label style="font-family:sans-serif">Size</label>
                <br />
                @Html.TextBoxFor(a => a.Size)
                <br />
                <br />

                <button class="btn btn-sm"  type="submit"> Add</button>

            }

错误:

  

无法为表格中的标识列插入显式值&#39; Shelf&#39;当&gt; IDENTITY_INSERT设置为OFF时。

我是ASP.net MVC和Entity Framework的新手。 我正在尝试为我的表格插入一个新行&#39; Shelf&#39;。但是当将数据发布到Action时,看起来该视图也在发送Id。我试图在下面记录shelf.Id的值行动,它是&#39; 0&#39;。如何阻止视图发送Id属性的任何数据?

1 个答案:

答案 0 :(得分:1)

问题出现在shelf.edmx文件中,我检查了表设计器中Id列的属性,并将storedGeneratedPattern值设置为identity,之前设置为{{1} }}