Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ:提交更改上的几个DeleteOnSubmit顺序行为_C#_Linq - Fatal编程技术网

C# LINQ:提交更改上的几个DeleteOnSubmit顺序行为

C# LINQ:提交更改上的几个DeleteOnSubmit顺序行为,c#,linq,C#,Linq,使用,当调用一行中的多个,然后调用SubmitChanges时: DataContext.DeleteOnSubmit(itemFromTb1); DataContext.DeleteOnSubmit(itemFromTb2); DataContext.SubmitChanges(); 它们总是按照我给它们打电话的顺序(itemFromTb1然后itemFromTb2)删除吗?还是不一定 编辑: 我知道SubmitChanges()的执行顺序如下 插入 更新 删除 但我不确定是否按照调用顺序

使用,当调用一行中的多个,然后调用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();