代码第一个数据库:SqlException:违反PRIMARY KEY约束'PK_dbo.PrivatKasses'。

时间:2017-06-16 16:31:39

标签: sql row code-first ef-migrations

我有一个这样的模型:

class PrivatKasse
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int ID { get; set; }
    public decimal Betrag { get; set; }
    public int BenutzerID { get; set; }

}

和一个检查表是否为空的函数。如果是函数添加新行。功能:

public static void DatabaseChecker()
    {
        using (var _db = new DataContext())
        {
            if (!_db.KasseGemeinsam.Any())
            {
                _db.KasseGemeinsam.Add(new Models.Data.KasseGemeinsamModel() { Jahr = DateTime.Now.Year.ToString(), Monat = MonatenVertauchen.ZahlZuMonaten(Convert.ToInt32(DateTime.Now.Month)), Haushalt = 0, Hygine = 0, Mobel = 0, Nahrung = 0, Schreibware = 0, Sonstiges = 0 });
                _db.SaveChanges();
            }

            if (!_db.KassePrivat.Any())
            {
                _db.KassePrivat.Add(new Models.Data.KassePrivatModel() { Jahr = DateTime.Now.Year.ToString(), Monat = MonatenVertauchen.ZahlZuMonaten(Convert.ToInt32(DateTime.Now.Month)), UserID = UserIdentity.UserID, Fahrkosten = 0, Hygine = 0, Mobel = 0, Nahrung = 0, Schreibware = 0, Sonstiges = 0 });
                _db.SaveChanges();
            }

            if (!_db.GemeinsamKasse.Any())
            {
                _db.GemeinsamKasse.Add(new Models.Data.GemeinsamKasse() { Betrag = 0 });
                _db.SaveChanges();
            }

            if (!_db.PrivatKasse.Any())
            {
                List<int> userIDs = new List<int>();
                foreach (var item in _db.UsersTbl)
                {
                    userIDs.Add(item.ID);
                }
                using (var _db2 = new DataContext())
                {
                    foreach (var item in userIDs)
                    {
                        _db2.PrivatKasse.Add(new Models.Data.PrivatKasse() { BenutzerID = item, Betrag = 0 });

                    }
                    _db2.SaveChanges();
                }



            }


        }

但是我得到了一个SqlExeption:

  

System.Data.Entity.Infrastructure.DbUpdateException:“更新条目时发生错误。有关详细信息,请参阅内部异常。”

     

UpdateException:更新条目时发生错误。见   细节的内在例外。

     

SqlException:违反PRIMARY KEY约束   'PK_dbo.PrivatKasses'。无法在对象中插入重复键   'dbo.PrivatKasses'。重复键值为(0)。

     

声明已经终止。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我认为问题是因为你没有提供id(并且int中的默认值为0)因为你声明了

[DatabaseGenerated(DatabaseGeneratedOption.None)]

这意味着db不会创建id,我建议使用Identity

[DatabaseGenerated(DatabaseGeneratedOption.Identity )]

然后你应该可以使用

_db2.PrivatKasse.Add(new Models.Data.PrivatKasse() { BenutzerID = item, Betrag = 0 })

否则提供id

_db2.PrivatKasse.Add(new Models.Data.PrivatKasse() {ID= customID, BenutzerID = item, Betrag = 0 })