2017-09-06 100 views
0

我正在嘗試向表中添加一條記錄並自動生成主鍵。我有StudentID列作爲主鍵,int, not null在SQL Server中。我不斷收到此錯誤:ASP.NET MVC中的自動增量ID

SqlException: Cannot insert the value NULL into column 'Student ID', table 'SchoolManagement.dbo.Student'; column does not allow nulls. INSERT fails. The statement has been terminated.

模型(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

無論您是使用數據庫第一還是先編碼? –

+0

數據庫優先。我是否需要在MSSQL中設置身份? – Freiza1991

+0

是的。你應該這樣做。 –

回答

0

如果你的代碼沒有公關請輸入學生證,然後您必須將其作爲您桌子上的身份字段。

請確保學生證字段在表格設計中包含此項。

IDENTITY (1,1) 

這會自動在行插入數據庫中爲您生成學生ID,併爲每個新行增加1。

我不相信你可以做出iirc後的列身份。因此,要麼刪除表格並重新創建或刪除不正確的列,並用正確的列替換。

所以要刪除列,並添加一個新問題:

Alter TABLE dbo.t_name drop column studentID 

然後:

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

如果你也可以爲OP提供改變腳本,那會更好,因爲我認爲表格已經漸變 – Jacky

0

我在SQL Server中改變了我的主鍵的IdentityNoYes,現在它自動遞增並且不顯示錯誤。