我正在尝试将模型保存到我的数据库中。我已经设置了模型并填写了相关控制器中的方法。当我运行我的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();
}
}
为了确保我的模型与当前背景相关联。
我的服务器资源管理器如下所示:
我使用了断点并且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。
答案 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 。