我正在尝试将记录添加到表中并自动生成主键。我在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");
});
答案 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中将主键的Identity
从No
更改为Yes
,现在它自动递增,不会显示错误。