我对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 - 感谢您的提示,我现在已经做到了,但它不幸解决了这个问题。 –