C# LINQ:提交更改上的几个DeleteOnSubmit顺序行为
使用,当调用一行中的多个,然后调用SubmitChanges时:C# LINQ:提交更改上的几个DeleteOnSubmit顺序行为,c#,linq,C#,Linq,使用,当调用一行中的多个,然后调用SubmitChanges时: DataContext.DeleteOnSubmit(itemFromTb1); DataContext.DeleteOnSubmit(itemFromTb2); DataContext.SubmitChanges(); 它们总是按照我给它们打电话的顺序(itemFromTb1然后itemFromTb2)删除吗?还是不一定 编辑: 我知道SubmitChanges()的执行顺序如下 插入 更新 删除 但我不确定是否按照调用顺序
DataContext.DeleteOnSubmit(itemFromTb1);
DataContext.DeleteOnSubmit(itemFromTb2);
DataContext.SubmitChanges();
它们总是按照我给它们打电话的顺序(itemFromTb1然后itemFromTb2)删除吗?还是不一定
编辑:
我知道SubmitChanges()的执行顺序如下
但我不确定是否按照调用顺序执行这些操作。根据我的经验,它们是按照您添加它们的顺序删除的。您可以通过使用context Log属性检查生成的SQL代码来验证这一点。根据我的经验,它们是按照您添加它们的顺序删除的。您可以通过使用context Log属性检查生成的SQL代码来验证这一点。在这种情况下,似乎没有人知道SubmitChanges()的正式行为。我有很多“我认为他们是在同一顺序做的”,并没有找到任何文章或官方信息。
似乎很多人对此没有任何问题,所以要么每个人在每次删除Submit后都进行SubmitChanges(),要么我们可以依靠统计数据得出结论:它们是按照调用顺序进行的。似乎没有人知道SubmitChanges()在这种情况下的官方行为。我有很多“我认为他们是在同一顺序做的”,并没有找到任何文章或官方信息。
似乎很多人对此没有任何问题,所以要么每个人在每次deleteosubmit后都执行SubmitChanges(),要么我们可以依靠统计信息:s来推断它们是按调用顺序执行的。我们有一个bug,该bug表明它们没有按顺序执行。我们的情况如下:
List=(来自myDB.tabletfile中的tf)
其中tf.mimetype.Equals(“xxx”)
选择tf.ToList();
myDB.tabletFile.InsertOnSubmit(tabletFile);
如果(ofpList.Count>0)
{
myDB.TabletFiles.deleteoSubmit(ofpList[0]);
}
myDB.SubmitChanges();
在这段代码中,有时先执行插入,有时执行删除 我们有一个bug,该bug表明它们没有按顺序执行。我们的情况如下:
List=(来自myDB.tabletfile中的tf)
其中tf.mimetype.Equals(“xxx”)
选择tf.ToList();
myDB.tabletFile.InsertOnSubmit(tabletFile);
如果(ofpList.Count>0)
{
myDB.TabletFiles.deleteoSubmit(ofpList[0]);
}
myDB.SubmitChanges();
在这段代码中,有时先执行插入,有时执行删除 看起来删除是按表名的顺序执行的 Linq2Sql按照表名的字母顺序执行SQL语句 或者如果你相信 实体标记为删除的顺序无关紧要,LINQ to SQL在执行Submit Changes调用期间根据外键的配置对其进行排序
如果删除在同一个表上,则显然是按照语句的顺序执行的,但您的里程数可能会有所不同。看起来删除是按照表名的顺序执行的 Linq2Sql按照表名的字母顺序执行SQL语句 或者如果你相信 实体标记为删除的顺序无关紧要,LINQ to SQL在执行Submit Changes调用期间根据外键的配置对其进行排序
如果删除在同一个表上,则显然是按照语句的顺序执行的,但您的里程数可能会有所不同。即使它们在sql中的顺序正确,也不能保证它们总是正确的。我似乎找不到有关删除顺序的任何信息,这可能意味着它是按“逻辑”顺序进行的,因此对此没有什么可说的。@DrDro-如果您确实需要控制顺序,您可能必须一次执行一个,每次之后都要执行SubmitChanges()。如果需要在事务范围内执行此操作,可以使用TransactionScope,它将所有提交的更改打包到一个事务中。即使它们在sql中的顺序正确,也不能保证它们始终正确。我似乎找不到有关删除顺序的任何信息,这可能意味着它是按“逻辑”顺序进行的,因此对此没有什么可说的。@DrDro-如果您确实需要控制顺序,您可能必须一次执行一个,每次之后都要执行SubmitChanges()。如果需要在事务范围内执行此操作,可以使用TransactionScope,它将所有提交的更改打包到单个事务中。
List<TabletFile> ofpList = (from tf in myDB.TabletFiles
where tf.mimetype.Equals("xxx")
select tf).ToList<TabletFile>();
myDB.TabletFiles.InsertOnSubmit(tabletFile);
if (ofpList.Count > 0)
{
myDB.TabletFiles.DeleteOnSubmit(ofpList[0]);
}
myDB.SubmitChanges();