如何将Entity Framework与数据库优先和标识列一起使用

时间:2016-05-14 13:55:15

标签: c# asp.net-mvc entity-framework

我有一个简单的数据库,其中包含几个与外键链接的表格。每个表都有一个“id”列,其中包含Identity Property和autoincrement。从这个数据库我在VS2015中生成了一个模型。如果我现在尝试在MVC 5 Web应用程序中插入新数据,我会得到一个错误,它说“NULL”值不能插入“id”列。所以我想知道为什么它甚至会尝试。它应该由数据库自动递增。在映射中,参数是:

Entity Key = true
Nullable = False (it´s integer, so it can´t be Nullable)
StoreGeneratedPattern = Identity
Type = Int32

模型本身就是自动生成的类:

namespace project.Models
{
    using System;
    using System.Collections.Generic;

    public partial class projectClass
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public projectClass()
        {
            this.plan = new HashSet<plan>();
        }

        public int id { get; set; }
        public string targetName { get; set; }
        public Nullable<System.DateTime> created { get; set; }
        public Nullable<System.DateTime> updated { get; set; }
        public int CategoryId { get; set; }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<plan> plan { get; set; }
        public virtual Category Category { get; set; }
    }
}

Controller也是自动生成的:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Create([Bind(Include = "id,targetName,created,updated,CategoryId")] projectClass projectClass)
    {
        if (ModelState.IsValid)
        {
            db.projectClass.Add(projectClass);
            await db.SaveChangesAsync();
            return RedirectToAction("Index");
        }

        ViewBag.trainingCategoryId = new SelectList(db.projectClass, "id", "shortDescription", projectClass.CategoryId);
        return View(projectClass);
    }

我真的不知道为什么要插入id列,以及在哪里更改它。

1 个答案:

答案 0 :(得分:0)

好的,明白了。这是一个数据库问题。我试图手动插入一行,也失败了。所以我在这张桌子上发现了一个写得很糟糕的触发器,引起了异常。