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时,都会提交所有等待发生的更改。通常,您只需执行一次,所有更改都在一个事务中完成。     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...