如何使实体框架6.0.0.0使用SQL标识和ID字段的种子



我对实体框架很陌生,所以我确信这是一个小学生的错误。我在Stackoverflow上检查了一些链接,比如这个线程,它给了我一些尝试的东西,但这并没有解决问题。

我有一个带有"tblPerson"的SQL数据库。主键是"PersonID",它被设置为Identity,其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);
}
}

"obj"是通过剃刀视图填充的,但它将具有PersonID=null,然而,当我实例化数据访问层并尝试添加和保存时,我希望它能工作,然而,我得到了错误:

"无法将值NULL插入列"PersonID"-该列不允许为NULL。">

如有任何提示,我们将不胜感激。

更新:在我的PersonDAL数据访问层中,这一行似乎从未被触发:public DbSet<Person> People { get; set; }所以,我不确定为什么控制器personDAL.People.Add(obj);上的行未能设置它?(我可以通过将People作为List拉回到控制器来证明这一切,它的计数为0)。有什么想法吗?

更新-愚蠢的错误!!-不知怎么的,我在tblPerson中取消了PersonID的SQL表设计中的"Identity"。现已修复。

SILLY ERROR!!-不知怎么的,我在tblPerson中取消了PersonID的SQL表设计中的"Identity"。现已修复。

最新更新