ASP.NET MVC中的自动增量ID

时间:2017-09-06 02:47:00

标签: c# sql-server entity-framework

我正在尝试将记录添加到表中并自动生成主键。我在SQL Server中将StudentID列作为主键int, not null。我一直收到这个错误:

  

SqlException:无法将值NULL插入“Student ID”列,表'SchoolManagement.dbo.Student';列不允许空值。 INSERT失败。   声明已经终止。

模特(Student.CS):

namespace SchoolChallenge.Models
{
    public partial class Student
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int StudentId { get; set; }
        public string StudentNumber { get; set; }
        [RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Use letters only please")]
        public string FirstName { get; set; }
        [RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Use letters only please")]
        public string LastName { get; set; }
        [RegularExpression(@"^[a-zA-Z]+$", ErrorMessage = "Use letters only please")]
        public string HasScholarship { get; set; }
    }
}

控制器(StudentsController):

// POST: Students/Create
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("StudentId,StudentNumber,FirstName,LastName,HasScholarship")] Student student)
{
    if (ModelState.IsValid)
    {
        _context.Add(student);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Index));
    }

    return View(student);
}

SchoolManagementContext.cs:

modelBuilder.Entity<Student>(entity =>
{
    entity.Property(e => e.StudentId)
        .HasColumnName("Student ID")
        .ValueGeneratedOnAdd();

    entity.Property(e => e.FirstName)
        .IsRequired()
        .HasColumnName("First Name")
        .HasMaxLength(50);

    entity.Property(e => e.HasScholarship)
        .IsRequired()
        .HasColumnName("Has Scholarship")
        .HasColumnType("nchar(10)");

    entity.Property(e => e.LastName)
        .IsRequired()
        .HasColumnName("Last Name")
        .HasMaxLength(50);

    entity.Property(e => e.StudentNumber).HasColumnName("Student Number");
});

2 个答案:

答案 0 :(得分:1)

如果您的代码未提供学生ID,则必须在表格中将其设为身份字段。

确保学生ID字段在表格设计中具有此功能。

IDENTITY (1,1) 

这将在行插入的数据库中为您自动生成学生ID,并为每个新行将ID递增1。

我不相信你在制作iirc后可以制作一个列标识。因此,要么删除表并重新创建或删除不正确的列,请更换正确的列。

所以要删除一个列并添加一个新列:

Alter TABLE dbo.t_name drop column studentID

然后:

Alter TABLE dbo.t_name add studentID int IDENTITY(1,1) NOT NULL

答案 1 :(得分:0)

我在SQL Server中将主键的IdentityNo更改为Yes,现在它自动递增,不会显示错误。