2016-06-10 65 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”。现在固定。

相关问题