【发布时间】:2017-09-06 02:47:00
【问题描述】:
我正在尝试向表中添加记录并自动生成主键。我在 SQL Server 中有 StudentID 列作为主键,int, not null。我不断收到此错误:
SqlException:无法将值 NULL 插入到列“学生 ID”、表“SchoolManagement.dbo.Student”中;列不允许空值。插入失败。 该语句已终止。
模特(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");
});
【问题讨论】:
-
您使用的是
database first还是code first? -
数据库优先。我需要在 MSSQL 中设置身份吗?
-
是的。你应该这样做。
-
如果您使用 Code First,请尝试
modelBuilder.Entity<Student>(...).HasKey(p => p.StudentId).Property(p => p.StudentId).StoreGeneratedPattern = StoreGeneratedPattern.Identity;。如果使用 DB First,请尝试将StudentId列设置为IDENTITY (1, 1)并且不要忘记在 EDMX 文件中将StoreGeneratedPattern设置为Identity。 -
在您的 Create 方法中,您是否尝试过从 Bind 属性中删除 StudentId 属性?
标签: c# sql-server entity-framework