Linq to sql Linq对SQL调用submitchanges()而不更改submit-是否执行任何操作?

Linq to sql Linq对SQL调用submitchanges()而不更改submit-是否执行任何操作?,linq-to-sql,Linq To Sql,我对数据库表进行了几次更新,这些更新可能会发生,也可能不会发生。与其多次调用submitchanges(),我宁愿只调用一次 可能不会向数据库提交任何更改 我的问题是Linq在这个场景中是否真的做了什么?或者它是否足够聪明,知道不需要更新,也不会发生任何事情——因此不会产生开销 谢谢你的建议 if (setTempResult) { tr = new tempResult();

我对数据库表进行了几次更新,这些更新可能会发生,也可能不会发生。与其多次调用submitchanges(),我宁愿只调用一次

可能不会向数据库提交任何更改

我的问题是Linq在这个场景中是否真的做了什么?或者它是否足够聪明,知道不需要更新,也不会发生任何事情——因此不会产生开销

谢谢你的建议

            if (setTempResult)
            {                    
                tr = new tempResult();
                db.tempResults.InsertOnSubmit(tr);
                tr.userId = tl.us.userId;
                tr.result = serializer.Serialize(tl.responseList);
                tr.resultTime = DateTime.Now;                    
            }

            if (string.IsNullOrEmpty(tl.actionCategory))
            {
                action ac = new action();
                ac.userId = tl.us.userId;
                ac.operation = "STR";                    
                db.actions.InsertOnSubmit(ac);
            }
            db.SubmitChanges();

根据您的后端,它应该能够检测是否进行了更改。例如,实体框架在其DbContext和附加的实体中使用所谓的对象状态


您可以在此处阅读:

在查看.NET 4.5上Linq to SQL的代码后,它似乎取决于您的代码是否在事务中。伪代码是:

public void SubmitChanges()
{
    if (inTransaction)
    {
        try
        {
            // Verify the connection is open, if it is the "clear" it
            // Begin a transaction
            // Send changes, if any
            // Commit transaction
        }
        catch
        {
            // Rollback transaction
        }
        finally
        {
            // Close the connection, if it was opened above
        }
    }
    else
    {
        // Send changes, if any
    }
}
如您所见,如果事务尚未包装在显式事务中,那么打开/关闭/清除连接以及开始/提交事务将产生开销