• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
一个具有上进心的码农
因为一篇文章中有很多是从很多篇文章中摘取的,请恕我没有一一说明摘取出处,如果没有说明,则该文章默认是摘取,如有侵犯您的权益,请与我联系,将会马上删除。
博客园    首页    新随笔    联系   管理    订阅  订阅

linq杂记

1 首先来谈谈Translate的用法。这个方法主要是来代替以前的DataReader,大多是用于扩展用的。

 

比如说:你要一个IN搜索的,就可以用这个来扩展。 当然。LINQ中现在已经有了IN的代替品。不需要用这个东西来扩展了。

 

Code
public static class DataContextExtensions
{
public static List<T> ExecuteQuery<T>(this DataContext dataContext, IQueryable query)
{
DbCommand command 
= dataContext.GetCommand(query);
dataContext.OpenConnection();
using (DbDataReader reader = command.ExecuteReader())
{
return dataContext.Translate<T>(reader).ToList();
}
}
private static void OpenConnection(this DataContext dataContext)
{
if (dataContext.Connection.State == ConnectionState.Closed)
{
dataContext.Connection.Open();
}
}
}

 

 

Translate方法并不会直接生成所有的对象,而是在外部代码访问Translate方法返回的IEnmuerable<T>时才会生成其中每个对象。这也是一种Lasy Load,但是也导致了所有的对象必须在Reader对象关闭之前生成,所以我一般都会在Translate方法后直接调用ToList方法,保证所有的对象已经生成了。虽然事实上我们也可以不使用using关键字而直接返回Translate方法生成的IEnumerable<Item>,不过这么做的话当前链接就得不到释放(释放,而不是关闭)

 

 

2   Linq to SQL中的事务(转载于横刀天笑的BLOG)

事务这个东西在并发的时候特别重要,Linq to SQL本身就支持事务,不过是乐观锁。我们也可以显式的启动Linq to SQL的事务。

            dbCtx.Transaction = dbCtx.Connection.BeginTransaction();

            try

            {

                dbCtx.ExecuteCommand("insert into posts(blogid,title,body) values({0},{1},{2})", "2", "走进Linq-How do I(4)", "废话一篇");

                dbCtx.ExecuteCommand("insert into posts(blogid,title,body) values({0},{1},{2})", "3", "走进Linq-How do I(5)", "废话两篇");

                dbCtx.Transaction.Commit();

            }

            catch

            {

                dbCtx.Transaction.Rollback();

            }

DbConnection的BeginTransaction方法还可以接受一个枚举参数IsolationLevel,来指定事务隔离的级别。

对于那些多个DataContext之间的事务,我们可以使用.NET 2.0引入的TransactionScope

 

 

 

 

 

posted @ 2008-08-14 11:25  不若相忘于江湖  阅读(239)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3