ASP.NET MVC没有保存到数据库?

时间:2016-12-04 01:37:22

标签: c# asp.net-mvc

我正在尝试将模型保存到我的数据库中。我已经设置了模型并填写了相关控制器中的方法。当我运行我的Web应用程序并浏览创建表单时,它让我单击并且不会给我任何错误,但它不会向数据库保存任何内容。这是我的模型的样子。

作业模式:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace ProjectVoting.Models
{
    public class Assignment
    {
        [Key]
        public int Id { get; set; }
        public string StudentName { get; set; }
        public int Votes { get; set; }
    }
}

这就是我在控制器中创建它的过程。

作业控制员:

using ProjectVoting.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;

namespace ProjectVoting.Controllers
{
    public class AssignmentController : Controller
    {
        ApplicationDbContext context;

        public AssignmentController()
        {
            context = new ApplicationDbContext();
        }

        // GET: Assignment
        public ActionResult Index()
        {
            return View(context.Assignments.ToList());
        }


        // GET: Assignment/Create
        [HttpGet]
        public ActionResult Create()
        {
            return View();
        }

        // POST: Assignment/Create
        [HttpPost]
        public ActionResult Create(Assignment assignment)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    context.Assignments.Add(assignment);
                    context.SaveChanges();
                    return RedirectToAction("Index");
                }
                return View(assignment);
            }
            catch
            {
                return View();
            }
        }
    }
}

我正在尝试使用当我创建项目时自动生成的当前本地数据库,而不是创建单独的数据库。这就是为什么我使用ApplicationDbContext而不是我创建的自定义上下文。在IdentityModels.cs中,我添加了以下内容:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public DbSet<Assignment> Assignments { get; set; }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

为了确保我的模型与当前背景相关联。

我的服务器资源管理器如下所示:

Enter image description here

我使用了断点并且ModelState有效,我输入了该块。但是当我到达context.SaveChanges();它会跳到catch块,这意味着该声明中正在发生一些事情。我在该语句中添加了一个catch(异常e),当我在使用断点运行它时将鼠标悬停在它上面时,它显示“更新条目时发生错误。有关详细信息,请参阅内部异常。”。当我检查它时,它说“不能将值NULL插入列'Id',表'aspnet-ProjectVoting-20161203051219.dbo.Assignments'”

为什么无法保存到数据库?

分辨率

它已被修复。需要使用以下属性创建数据库:

CREATE TABLE [dbo].[Assignments] (
    [Id]          INT          IDENTITY (1, 1) NOT NULL,
    [StudentName] VARCHAR (50) NULL,
    [Votes]       INT          NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);

我的ID未自动递增,并且在发布时尝试将其设置为null。

1 个答案:

答案 0 :(得分:0)

我假设您正在使用EF6的代码优先方法。请确保正确设置了Assignment实体的EF6映射。根据您提到的错误,它很可能与错误的映射相关

  

&#34;无法将值NULL插入列&#39; Id&#39;,表中   &#39; ASPNET-ProjectVoting-20161203051219.dbo.Assignments&#39 ;;专栏没有   允许空值。 INSERT失败。该声明已被终止。&#34;

您必须确保,Id配置了DatabaseGeneratedOption.Identity

modelBuilder.Entity<Assignment>()
        .Property(c => c.Id)
        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

有关详细信息,请参阅Stack Overflow问题 How to set id key to be generated by the database in Entity Framework after model creation using Database First