添加实体时出现DbUpdateException

时间:2015-08-06 10:57:13

标签: c# entity-framework

我正在尝试在我的数据库播种时添加许多测试实体,并且我遇到了带有以下星座的DbUpdateException:

self.tblMainTable.performSelectorOnMainThread(Selector("reloadData"), withObject: nil, waitUntilDone: true)

我可以使用种子方法中的这些法律列表成功地将法律添加到我的数据库中:

transparent

但是,以下将导致第二个循环出现DbUpdateException,我不明白为什么:

public class Law
{
    [Key]
    public int Id {get;set;}
    // a law in my context is just a container of LawVersions
    public virtual IList<LawVersion> Versions {get;set;}
}

public class LawVersion
{
    [Key]
    public int Id {get; set;}
    public virtual Law Law {get; set;}
    public string CreationNote {get;set;}
    public DateTime CreationDate {get;set;}

    public LawVersion() 
    {
        CreationDate = DateTime.Now
    }
}

异常表明

  

保存不公开其关系的外键属性的实体时发生错误。 (......)。存储更新,插入或删除语句会影响意外的行数(0)。

我已经为另一个实体工作了,我看不出它们之间有什么不同。我会非常感谢你的暗示。

1 个答案:

答案 0 :(得分:0)

这很可能是因为您正在尝试重新添加数据库中已存在的实体。请在保存之前尝试以下操作将现有实体复制到新对象:

for (var i = 0; i < 100; i++)
{
    foreach (var l in Laws) 
    {
        db.Laws.Add(new Law
        {
            Name = l.Name,
            CreationNote = l.CreationNote,
            CreationDate = l.CreationDate
        });
    }
}
db.SaveChanges();