使用一个SaveChanges()命令从头开始(使用M:M关系)填充整个db

时间:2014-09-04 13:18:27

标签: c# entity-framework

我的数据库是空的,在我的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是主键,但不是自动保护的。

1 个答案:

答案 0 :(得分:0)

你不需要坚持只有一个SaveChanges"如果你想强制执行"要么保存所有东西,要么什么都不是",你应该将它拆分成许多保存但是将它们包装在同一个事务中,并且最后只提交该事务。

优点是,如果它失败了,你可以更好地查看它失败的地方(而不是在最后做它并且需要深入研究异常以获得神秘的错误)。

对于EF6或更高版本中的示例:http://msdn.microsoft.com/en-us/data/dn456843.aspx