【发布时间】:2017-06-16 16:31:39
【问题描述】:
我有一个这样的模型:
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:违反主键约束 'PK_dbo.PrivatKasses'。无法在对象中插入重复键 'dbo.PrivatKasses'。重复键值为 (0)。
语句已终止。
我该如何解决这个问题?
【问题讨论】:
-
这个
BenutzerID = item, Betrag = 0不应该是BenutzerID = item.ID, Betrag = 0吗? -
要么为 PrivatKasse 提供 ID,要么取消属性
[DatabaseGenerated(DatabaseGeneratedOption.None)],使其成为一个身份字段(int 键的默认值)。 -
@WEI_DBA 我认为不会。那是一个 ID 整数列表。
标签: sql row code-first entity-framework-migrations