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