Linq to SQL调用submitchanges()而没有更改提交 - 做任何事情?

时间:2014-06-20 01:16:44

标签: linq-to-sql

我对数据库表有几处更新,可能会也可能不会发生。我不是多次调用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();

2 个答案:

答案 0 :(得分:2)

在.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
    }
}

正如您所看到的,如果事务尚未包含在显式事务中,则会有开启/关闭/清除连接以及开始/提交事务的开销。

答案 1 :(得分:1)

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

您可以在此处阅读:http://msdn.microsoft.com/en-us/library/bb386982(v=vs.110).aspx