Linq to sql Linq对SQL调用submitchanges()而不更改submit-是否执行任何操作?
我对数据库表进行了几次更新,这些更新可能会发生,也可能不会发生。与其多次调用submitchanges(),我宁愿只调用一次 可能不会向数据库提交任何更改 我的问题是Linq在这个场景中是否真的做了什么?或者它是否足够聪明,知道不需要更新,也不会发生任何事情——因此不会产生开销 谢谢你的建议Linq to sql Linq对SQL调用submitchanges()而不更改submit-是否执行任何操作?,linq-to-sql,Linq To Sql,我对数据库表进行了几次更新,这些更新可能会发生,也可能不会发生。与其多次调用submitchanges(),我宁愿只调用一次 可能不会向数据库提交任何更改 我的问题是Linq在这个场景中是否真的做了什么?或者它是否足够聪明,知道不需要更新,也不会发生任何事情——因此不会产生开销 谢谢你的建议 if (setTempResult) { tr = new tempResult();
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
}
}
如您所见,如果事务尚未包装在显式事务中,那么打开/关闭/清除连接以及开始/提交事务将产生开销