如何解决Linq2Sql数据上下文登录/注销行为
| 我正在使用L2S来检查密钥是否已经存在,如果不存在,请创建并插入一个。此相同的DataContext还用于在同一C#方法内执行其他查询。完成后,我隐含了using
关键字来处理DataContext。我连接了sql profiler,发现它会登录,执行查询,然后注销。即使相同的DataContext将执行查询或稍后进行更新,似乎也可以这样做。我认为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 profiler将这些注销的“持续时间”显示为几百毫秒。到时候我的应用程序正在等待吗?
解决方法
FirstOrDefault
执行查询,因为它需要返回结果,而不是可能的集合-Any
同样如此。创建DataContext时,它不会立即登录。我可以向您保证,尽管这看起来可能很“糟糕”,但完全可以。
,L2S数据上下文不会持久连接,这就是为什么您在探查器中看到“登录/注销”的原因。它确实保留状态,这对于更改跟踪很重要。
这是有关L2S DataContext管理的好文章:http://www.west-wind.com/weblog/posts/2008/Feb/05/Linq-to-SQL-DataContext-Lifetime-Management
,在Linq-2-sql中,不会延迟在此处使用它们的方式调用的Any()和.FirstOrDefault()。当您调用它们时,它们将导致执行。因此,在这种情况下,它们将立即触发,这也是您在探查器中注意到的。
另请参阅:如何维护LINQ延迟执行?
我认为您一方面混合了延迟执行的查询,另一方面又混合了一些更新。
每次您调用SubmitChanges时,都会提交所有等待发生的更改。通常,您只需执行一次,所有更改都在一个事务中完成。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。