2016-06-10 61 views
0

我對Entity Framework非常陌生,所以我確信這是一個小學生的錯誤。我已經在Stackoverflow上檢查了幾個鏈接,例如thread,它給了我一些嘗試,但是這並沒有解決問題。如何讓Entity Framework 6.0.0.0使用SQL Identity和Seed for ID字段

我有一個SQL數據庫與「tblPerson」。主鍵是「PersonID」,它被設置爲標識,其中Seed = 1(int)。

然後我創建了一個C#\ ASP.NET前端。

我對人的類:

public class Person 
{ 
    [Key] 
    public Int64 PersonID { get; set; } 

    [Required] 
    [StringLength(10)] 
    [RegularExpression("^[A-Za-z0-9]{2,10}$")] 
    public string Name { get; set; } 

    public bool Active { get; set; } 
} 

我有一個數據訪問層的類,然後處理寫入到數據庫:

public class PersonDAL : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     base.OnModelCreating(modelBuilder); 
     modelBuilder.Entity<Person>().ToTable("tblPerson"); 
     modelBuilder.Entity<Person>().Property(x => x.PersonID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 
    } 

    public DbSet<Person> People { get; set; } 
} 

正如你所看到的,我告訴它該PersonID字段應該是數據庫生成的標識。

這是我認爲稱之爲「添加」控制器內部代碼:

 public ActionResult Add(Person obj) //Validation runs here 
    { 
     if (ModelState.IsValid) 
     { 
      PersonDAL personDAL = new PersonDAL(); 
      personDAL.People.Add(obj); 
      personDAL.SaveChanges(); 
      personDAL.Dispose(); 
      obj = null; 
      return View("AddPerson", obj); 
     } 
     else 
     { 
      return View("AddPerson", obj); 
     } 
    } 

「目標文件」通過Razor視圖填充,但它會是PersonID = NULL,但是,當我實例化數據訪問層,並嘗試添加和保存,我希望這個工作,但是,我得到的錯誤:

「不能插入NULL值列'PersonID'列不允許空值。

任何提示將不勝感激。

更新:看來,在我的PersonDAL數據訪問層,這條線永遠不會被觸發:public DbSet<Person> People { get; set; }所以,我不知道爲什麼控制器personDAL.People.Add(obj);線路無法設置它? (我可以通過將人員作爲列表返回給控制器來證明所有這一切,並且它的計數爲0)。任何想法的人?

更新 - SILLY錯誤! - 我以某種方式設法取消tblPerson中PersonID的SQL表設計中的「Identity」。現在固定。

+2

我能看到的一個問題是你需要移動這一行:base.OnModelCreating(modelBuilder);到OnModelCreating的結尾。 –

+0

此外,你可以使用屬性,而不是重寫OnModelCreating https://msdn.microsoft.com/en-us/library/hh425941(v=vs.110).aspx – chameleon86

+0

@StephenBrickner - 感謝您的提示,我現在已經做到了,但它不幸解決了這個問題。 –

回答

0

SILLY ERROR !! - 我以某種方式設法取消tblPerson中PersonID的SQL表設計中的「Identity」。現在固定。

相關問題