我使用L2S检查密钥是否已经存在,如果不存在,则创建并插入密钥。这个相同的DataContext也用于在同一个C#方法中执行其他查询。我请求using关键字在处理完DataContext后释放它。我连接了sql分析器,看到它会登录,执行查询,然后注销。即使相同的DataContext稍后将执行查询或更新,它似乎也会这样做。我以为数据文本只登录一次,并在那一次会议期间执行了所有的查询?多长时间调用SubmitChanges()重要吗?或者我错过了什么?
嘲笑我所看到的:
using(Datacontext)
{
//Audit Login
var b = DataContext.Table.FirstOrDefault(t=>t.Id == 4);
//RPC: Completed
//Audit Logout
//Audit Login
var x = DataContext.OtherTable.Any(t=>t.Id == 4);
//RPC: Completed
//Audit Logout
}更新
sql分析器将这些注销的“持续时间”显示为几百毫秒。该是我的应用程序等待的时候了,对吗?
发布于 2011-05-26 15:07:59
FirstOrDefault执行一个查询,因为它需要返回一个结果,而不是一个潜在的集合-- Any也是这样。创建DataContext时,它不会立即登录。我可以向你保证,虽然这看起来很“糟糕”,但它是完全好的。
发布于 2011-05-26 15:05:44
在Linq-2-sql中,调用这里使用它们的任何()和.FirstOrDefault()都不能延迟。当您调用它们时,它们将导致执行。因此,在这种情况下,他们会立即开火,这也是你在分析器中注意到的。
另见:How to maintain LINQ deferred execution?
我认为,一方面是延迟执行查询,另一方面是更新。
每次调用Submitchanges时,都会提交等待发生的所有更改。通常,您只需要执行一次,并且所有的更改都在一个事务中完成。
发布于 2011-05-26 15:08:15
L2S数据文本不持久化连接,这就是您在分析器中看到Login/Logout的原因。它确实持久化状态,这对于更改跟踪非常重要。
下面是L2S DataContext management的一篇好文章:http://www.west-wind.com/weblog/posts/2008/Feb/05/Linq-to-SQL-DataContext-Lifetime-Management
https://stackoverflow.com/questions/6140661
复制相似问题