我對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」。現在固定。
我能看到的一個問題是你需要移動這一行:base.OnModelCreating(modelBuilder);到OnModelCreating的結尾。 –
此外,你可以使用屬性,而不是重寫OnModelCreating https://msdn.microsoft.com/en-us/library/hh425941(v=vs.110).aspx – chameleon86
@StephenBrickner - 感謝您的提示,我現在已經做到了,但它不幸解決了這個問題。 –