2017-05-06 55 views
0

我尝试保存表单记录,并从客户端获取实体,但每次需要PersonalId = 0,这将是重复的主键错误。如何防止C#中的重复主键?

我该如何解决这个问题?

public ActionResult SavePersonal(PersonalViewModel model) 
{ 
    try 
    { 
     StorageSystemEntities1 db = new StorageSystemEntities1(); 

     Personal personal = new Personal(); 
     personal.PName = model.PName; 
     personal.PLastname = model.PLastname; 
     personal.PStatus = model.PStatus; 
     personal.ShopId = model.ShopId; 
     personal.PPassword = model.PPassword; 
     personal.GenderID = model.GenderID; 
     personal.DOB = model.DOB; 
     personal.Email = model.Email; 
     personal.JobStartDate = model.JobStartDate; 
     personal.PAuthorisation = model.PAuthorisation; 
     personal.Phone = model.Phone; 

     db.Personal.Add(personal); 
     db.SaveChanges(); 

     int latestPersonalId = personal.PersonalID; 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 

    return RedirectToAction("_AddPersonal"); 
} 
+2

您在数据库表使用IDENTITY列,并创建在同一列 – Steve

+1

^^^^随着身份种子和增量主键约束。如果你使用实体框架,你需要把'[DatabaseGenerated(DatabaseGeneratedOption.Identity)]'作为一个属性在'PersonalID'属性 –

+0

在数据库中我有PersonalID,我想增加它每次保存recort,但它总是需要0 – muco

回答

0

一些方法能够穿过这一点,即:

  • 在您的应用程序生成唯一的ID(即GUID)

  • 同样的事情,但在你的数据库引擎(即SQL过程)

  • 使用上述答案中提到的sql身份,因此在您的应用中不应该做任何事情

  • 希望在你Personal类的上面一个帮助

0

使用[DatabaseGenerated(DatabaseGeneratedOption.Identity)]

例子:

public class Personal { 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int PersonalId {get;set;} 
    public string PName {get;set;} 
    public string PLastname {get;set;} 
    public string PStatus {get;set;} 
    public int ShopId {get;set;} 
    [DataType(DataType.Password)] 
    public string PPassword {get;set;} 
    public string GenderID {get;set;} 
    public DateTime? DOB {get;set;} 
    [EmailAddress] 
    public string Email {get;set;} 
    public DateTime? JobStartDate {get;set;} 
    public string PAuthorisation {get;set;} 
    [DataType(DataType.PhoneNumber)] 
    public string Phone {get;set;} 
}