C#学习教程:方言/驱动——我做的每一个SELECT,加(nolock)我在Nhibernate中做了一个SELECT,SELECT添加了with(nolock)。我需要在C#和NHibernate中,而不是直接在数据库中!希望你能理解!谢谢!拦截器可以用来修改sql和重写OnPrepareStatement方法,如下所示:这是一个使用NHibernateInterceptor方法注册的拦截器:varsession=SessionFactory.OpenSession(newAddNoLockHintsInterceptor());使用WITH(NOLOCK)提示与使用READUNCOMMITED事务隔离级别相同,如下所述:何时应使用“with(nolock)”。当用NHibernate开始一个新事务时,你可以指定事务隔离级别:varsession=SessionFactory.OpenSession();session.BeginTransaction(IsolationLevel.ReadUncommitted);除非你真的知道自己在做什么,否则我不会推荐这个。以下是有关该主题的更多信息:为什么使用READUNCOMMITTED隔离级别?.希望这对某人有帮助,我使用这段代码为大多数查询添加无锁提示,与dillenmeister的答案相关StartsWithCaseInsensitive("select")){varparts=newList((object[])sql.Parts);对象fromItem=parts.FirstOrDefault(p=>p.ToString().ToLower().Trim().Equals("from"));intfromIndex=fromItem!=null?零件.IndexOf(fromItem):-1;对象whereItem=parts.FirstOrDefault(p=>p.ToString().ToLower().Trim().Equals("where"));intwhereIndex=whereItem!=null?parts.IndexOf(whereItem):parts.Count;如果(fromIndex==-1)返回sql;parts.Insert(parts.IndexOf(fromItem)+2,"with(nolock)");for(inti=fromIndex;i这段代码中有两个错误:对于带有参数的SQL脚本,这段代码不起作用。SqlString.Parts未编译,我正在使用NHibernate4.0.0.4000这是修复方法:以上是C#学习教程:方言/驱动程序-我做的每个SELECT,添加(nolock)如果它对任何人有帮助,请分享整个内容有用和需要了解更多C#学习教程,希望大家多多关注—publicclassNoLockInterceptor:EmptyInterceptor{publicoverrideSqlStringOnPrepareStatement(SqlStringsql){//varlog=newStringBuilder();//log.Append(sql.ToString());//日志.AppendLine();//修改sql添加提示if(sql.StartsWithCaseInsensitive("select")){varparts=sql.ToString().Split().ToList();varfromItem=parts.FirstOrDefault(p=>p.Trim().Equals("from",StringComparison.OrdinalIgnoreCase));intfromIndex=fromItem!=null?零件.IndexOf(fromItem):-1;varwhereItem=零件。FirstOrDefault(p=>p.Trim().Equals("where",StringComparison.OrdinalIgnoreCase));intwhereIndex=whereItem!=null?parts.IndexOf(whereItem):parts.Count;如果(fromIndex==-1)返回sql;parts.Insert(parts.IndexOf(fromItem)+3,"WITH(NOLOCK)");对于(inti=fromIndex;i本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
