2017-09-06 35 views
0

テーブルにレコードを追加しようとしていて、プライマリキーを自動生成しようとしています。私は列をプライマリキーとして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

'database first'か' code first'のどちらを使ったのですか? –

+0

まずデータベース。私はMSSQLでアイデンティティを設定する必要がありますか? – Freiza1991

+0

はい。あなたはそれをしたほうがいい。 –

答えて

0

私はこのエラーを得続けますあなたのコードがprでない場合生徒IDを取得したら、それをテーブルの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 
+0

私はテーブルがすでにcreeatedだと思うので、あなたがOPのための変更スクリプトを提供することができればそれは良いでしょう – Jacky

0

私はSQL ServerでYesNoから私の主キーのIdentityを変え、今で自動増分され、エラーは表示されません。

関連する問題