我的数据库是空的,在我的C#应用程序中,我需要填充它并只使用一个.SaveChanges()命令 - 要么保存所有内容,要么不保存任何内容。
我遇到的问题是:
我有3个表:Person,Class,PersonClass。那些都是空的。
所以,在C#代码中,通过实体模型,我添加了一个人{Id:1,Name:John}。 接下来,我想在John和某个类之间添加一个关系,之后我想添加该类。所以,在我创建约翰之后,我这样做:
John.Classes.Add(new Class
{
ClassId = 1
});
然后我在数据库中添加数学。
在我SaveChanges()之后,我得到违反PRIMARY KEY约束:无法插入重复键。
在我的PersonClass表中,我有2列 - personId和classId。它们都是主键,并且它们不是自动递增的属性。
Person有2列:id和Name。类只有一列 - id。 ID是主键,但不是自动保护的。
答案 0 :(得分:0)
你不需要坚持只有一个SaveChanges"如果你想强制执行"要么保存所有东西,要么什么都不是",你应该将它拆分成许多保存但是将它们包装在同一个事务中,并且最后只提交该事务。
优点是,如果它失败了,你可以更好地查看它失败的地方(而不是在最后做它并且需要深入研究异常以获得神秘的错误)。
对于EF6或更高版本中的示例:http://msdn.microsoft.com/en-us/data/dn456843.aspx