回到目录 对于linq to sql提供的CURD 操作 ,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合实体,希望进行update 操作 ,如果你还用linq to sql提代的updat
回到目录
对于linq to sql提供的CURD操作,给我们的感觉就是简单,容易使用,更加面向对象,不用拼SQL语句了,这些好处都表示在处理单条实体或者集合长度小的情况下,如果有一个1000条的集合实体,希望进行update操作,如果你还用linq to sql提代的update,那你服务器就快要挂了,呵呵。
为什么呢?
对于LINQ提借的命令,如update(list),它会把list进行foreache的遍历,然后一条一条指令的向SQLSERVER发送,好家伙,这要是1000,1W条实体的集合,进行update操作,这个对IO的开销和服务器的性能来说都是没法接受的,呵呵,应该是一个SQL链接,一个指令,就能解决问题呀!
自己封套性能更好的CURD集合操作(选自我的entity framework架构,linq to sql没来的及实现)
<span>///</span> <span><summary></summary></span> <span>///</span><span> SQL<strong>操作</strong>类型 </span><span>///</span> <span></span> <span>protected</span> <span>enum</span><span> SQLType { Insert, Update, Delete, } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 构建Update语句串 </span><span>///</span> <span></span> <span>///</span> <span><typeparam name="TEntity"></typeparam></span> <span>///</span> <span><param name="entity"></span> <span>///</span> <span><returns></returns></span> <span>private</span> Tuplestring, <span>object</span>[]> CreateUpdateSQL<tentity>(TEntity entity) <span>where</span> TEntity : <span>class</span><span> { </span><span>if</span> (entity == <span>null</span><span>) </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>The database entity can not be null.</span><span>"</span><span>); List</span>string> pkList = GetPrimaryKey<tentity>().Select(i =><span> i.Name).ToList(); Type entityType </span>=<span> entity.GetType(); </span><span>var</span> table = entityType.GetProperties().Where(i => !<span>pkList.Contains(i.Name) </span>&& i.GetValue(entity, <span>null</span>) != <span>null</span> && i.PropertyType != <span>typeof</span><span>(EntityState) </span>&& !(i.GetCustomAttributes(<span>false</span>).Length > <span>0</span> && i.GetCustomAttributes(<span>false</span>).Where(j => j.GetType() == <span>typeof</span>(NavigationAttribute)) != <span>null</span><span>) </span>&& (i.PropertyType.IsValueType || i.PropertyType == <span>typeof</span>(<span>string</span>)) <span>//</span><span>过滤导航属性</span> <span> ).ToArray(); </span><span>//</span><span>过滤主键,航行属性,状态属性等</span> <span>if</span> (pkList == <span>null</span> || pkList.Count == <span>0</span><span>) </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>The Table entity have not a primary key.</span><span>"</span><span>); List</span>object> arguments = <span>new</span> Listobject><span>(); StringBuilder builder </span>= <span>new</span><span> StringBuilder(); </span><span>foreach</span> (<span>var</span> change <span>in</span><span> table) { </span><span>if</span><span> (pkList.Contains(change.Name)) </span><span>continue</span><span>; </span><span>if</span> (arguments.Count != <span>0</span><span>) builder.Append(</span><span>"</span><span>, </span><span>"</span><span>); builder.Append(change.Name </span>+ <span>"</span><span> = {</span><span>"</span> + arguments.Count + <span>"</span><span>}</span><span>"</span><span>); </span><span>if</span> (change.PropertyType == <span>typeof</span>(<span>string</span>) || change.PropertyType == <span>typeof</span><span>(DateTime)) arguments.Add(</span><span>"</span><span>'</span><span>"</span> + change.GetValue(entity, <span>null</span>).ToString().Replace(<span>"</span><span>'</span><span>"</span>, <span>"</span><span>char(39)</span><span>"</span>) + <span>"</span><span>'</span><span>"</span><span>); </span><span>else</span><span> arguments.Add(change.GetValue(entity, </span><span>null</span><span>)); } </span><span>if</span> (builder.Length == <span>0</span><span>) </span><span>throw</span> <span>new</span> Exception(<span>"</span><span>没有任何属性进行更新</span><span>"</span><span>); builder.Insert(</span><span>0</span>, <span>"</span><span> UPDATE </span><span>"</span> + <span>string</span>.Format(<span>"</span><span>[{0}]</span><span>"</span>, entityType.Name) + <span>"</span><span> SET </span><span>"</span><span>); builder.Append(</span><span>"</span><span> WHERE </span><span>"</span><span>); </span><span>bool</span> firstPrimaryKey = <span>true</span><span>; </span><span>foreach</span> (<span>var</span> primaryField <span>in</span><span> pkList) { </span><span>if</span><span> (firstPrimaryKey) firstPrimaryKey </span>= <span>false</span><span>; </span><span>else</span><span> builder.Append(</span><span>"</span><span> AND </span><span>"</span><span>); </span><span>object</span> val = entityType.GetProperty(primaryField).GetValue(entity, <span>null</span><span>); builder.Append(GetEqualStatment(primaryField, arguments.Count)); arguments.Add(val); } </span><span>return</span> <span>new</span> Tuplestring, <span>object</span>[]><span>(builder.ToString(), arguments.ToArray()); } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 构建Delete语句串 </span><span>///</span> <span></span> <span>///</span> <span><typeparam name="TEntity"></typeparam></span> <span>///</span> <span><param name="entity"></span> <span>///</span> <span><returns></returns></span> <span>private</span> Tuplestring, <span>object</span>[]> CreateDeleteSQL<tentity>(TEntity entity) <span>where</span> TEntity : <span>class</span><span> { </span><span>if</span> (entity == <span>null</span><span>) </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>The database entity can not be null.</span><span>"</span><span>); Type entityType </span>=<span> entity.GetType(); List</span>string> pkList = GetPrimaryKey<tentity>().Select(i =><span> i.Name).ToList(); </span><span>if</span> (pkList == <span>null</span> || pkList.Count == <span>0</span><span>) </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>The Table entity have not a primary key.</span><span>"</span><span>); List</span>object> arguments = <span>new</span> Listobject><span>(); StringBuilder builder </span>= <span>new</span><span> StringBuilder(); builder.Append(</span><span>"</span><span> Delete from </span><span>"</span> + <span>string</span>.Format(<span>"</span><span>[{0}]</span><span>"</span><span>, entityType.Name)); builder.Append(</span><span>"</span><span> WHERE </span><span>"</span><span>); </span><span>bool</span> firstPrimaryKey = <span>true</span><span>; </span><span>foreach</span> (<span>var</span> primaryField <span>in</span><span> pkList) { </span><span>if</span><span> (firstPrimaryKey) firstPrimaryKey </span>= <span>false</span><span>; </span><span>else</span><span> builder.Append(</span><span>"</span><span> AND </span><span>"</span><span>); </span><span>object</span> val = entityType.GetProperty(primaryField).GetValue(entity, <span>null</span><span>); builder.Append(GetEqualStatment(primaryField, arguments.Count)); arguments.Add(val); } </span><span>return</span> <span>new</span> Tuplestring, <span>object</span>[]><span>(builder.ToString(), arguments.ToArray()); } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 构建Insert语句串 </span><span>///</span><span> 主键为自增时,如果主键值为0,我们将主键插入到SQL串中 </span><span>///</span> <span></span> <span>///</span> <span><typeparam name="TEntity"></typeparam></span> <span>///</span> <span><param name="entity"></span> <span>///</span> <span><returns></returns></span> <span>private</span> Tuplestring, <span>object</span>[]> CreateInsertSQL<tentity>(TEntity entity) <span>where</span> TEntity : <span>class</span><span> { </span><span>if</span> (entity == <span>null</span><span>) </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>The database entity can not be null.</span><span>"</span><span>); Type entityType </span>=<span> entity.GetType(); </span><span>var</span> table = entityType.GetProperties().Where(i => i.PropertyType != <span>typeof</span><span>(EntityKey) </span>&& i.PropertyType != <span>typeof</span><span>(EntityState) </span>&& i.Name != <span>"</span><span>IsValid</span><span>"</span> && i.GetValue(entity, <span>null</span>) != <span>null</span> && !(i.GetCustomAttributes(<span>false</span>).Length > <span>0</span> && i.GetCustomAttributes(<span>false</span>).Where(j => j.GetType() == <span>typeof</span>(NavigationAttribute)) != <span>null</span><span>) </span>&& (i.PropertyType.IsValueType || i.PropertyType == <span>typeof</span>(<span>string</span>))).ToArray();<span>//</span><span>过滤主键,航行属性,状态属性等</span> <span> List</span>string> pkList = GetPrimaryKey<tentity>().Select(i =><span> i.Name).ToList(); List</span>object> arguments = <span>new</span> Listobject><span>(); StringBuilder fieldbuilder </span>= <span>new</span><span> StringBuilder(); StringBuilder valuebuilder </span>= <span>new</span><span> StringBuilder(); fieldbuilder.Append(</span><span>"</span><span> INSERT INTO </span><span>"</span> + <span>string</span>.Format(<span>"</span><span>[{0}]</span><span>"</span>, entityType.Name) + <span>"</span><span> (</span><span>"</span><span>); </span><span>foreach</span> (<span>var</span> member <span>in</span><span> table) { </span><span>if</span> (pkList.Contains(member.Name) && Convert.ToString(member.GetValue(entity, <span>null</span>)) == <span>"</span><span>0</span><span>"</span><span>) </span><span>continue</span><span>; </span><span>object</span> value = member.GetValue(entity, <span>null</span><span>); </span><span>if</span> (value != <span>null</span><span>) { </span><span>if</span> (arguments.Count != <span>0</span><span>) { fieldbuilder.Append(</span><span>"</span><span>, </span><span>"</span><span>); valuebuilder.Append(</span><span>"</span><span>, </span><span>"</span><span>); } fieldbuilder.Append(member.Name); </span><span>if</span> (member.PropertyType == <span>typeof</span>(<span>string</span>) || member.PropertyType == <span>typeof</span><span>(DateTime)) valuebuilder.Append(</span><span>"</span><span>'{</span><span>"</span> + arguments.Count + <span>"</span><span>}'</span><span>"</span><span>); </span><span>else</span><span> valuebuilder.Append(</span><span>"</span><span>{</span><span>"</span> + arguments.Count + <span>"</span><span>}</span><span>"</span><span>); </span><span>if</span> (value.GetType() == <span>typeof</span>(<span>string</span><span>)) value </span>= value.ToString().Replace(<span>"</span><span>'</span><span>"</span>, <span>"</span><span>char(39)</span><span>"</span><span>); arguments.Add(value); } } fieldbuilder.Append(</span><span>"</span><span>) Values (</span><span>"</span><span>); fieldbuilder.Append(valuebuilder.ToString()); fieldbuilder.Append(</span><span>"</span><span>);</span><span>"</span><span>); </span><span>return</span> <span>new</span> Tuplestring, <span>object</span>[]><span>(fieldbuilder.ToString(), arguments.ToArray()); } </span><span>///</span> <span><summary></summary></span> <span>///</span><span> 执行SQL,根据SQL<strong>操作</strong>的类型 </span><span>///</span> <span></span> <span>///</span> <span><typeparam name="TEntity"></typeparam></span> <span>///</span> <span><param name="list"></span> <span>///</span> <span><param name="sqlType"></span> <span>///</span> <span><returns></returns></span> <span>protected</span> <span>string</span> DoSQL<tentity>(IEnumerable<tentity> list, SQLType sqlType) <span>where</span> TEntity : <span>class</span><span> { StringBuilder sqlstr </span>= <span>new</span><span> StringBuilder(); </span><span>switch</span><span> (sqlType) { </span><span>case</span><span> SQLType.Insert: list.ToList().ForEach(i </span>=><span> { Tuple</span>string, <span>object</span>[]> sql =<span> CreateInsertSQL(i); sqlstr.AppendFormat(sql.Item1, sql.Item2); }); </span><span>break</span><span>; </span><span>case</span><span> SQLType.Update: list.ToList().ForEach(i </span>=><span> { Tuple</span>string, <span>object</span>[]> sql =<span> CreateUpdateSQL(i); sqlstr.AppendFormat(sql.Item1, sql.Item2); }); </span><span>break</span><span>; </span><span>case</span><span> SQLType.Delete: list.ToList().ForEach(i </span>=><span> { Tuple</span>string, <span>object</span>[]> sql =<span> CreateDeleteSQL(i); sqlstr.AppendFormat(sql.Item1, sql.Item2); }); </span><span>break</span><span>; </span><span>default</span><span>: </span><span>throw</span> <span>new</span> ArgumentException(<span>"</span><span>请输入正确的参数</span><span>"</span><span>); } </span><span>return</span><span> sqlstr.ToString(); }</span></tentity></tentity></tentity></tentity></tentity></tentity></tentity></tentity>
前方永远都是通往成功的路,只要你相信,它就会更快的实现...
回到目录

解决Java反射异常(ReflectiveOperationException)的方法在Java开发中,反射(Reflection)是一种强大的机制,它允许程序在运行时动态地获取和操作类、对象、方法和属性等。通过反射,我们可以实现一些灵活的功能,比如动态创建对象、调用私有方法、获取类的注解等。然而,使用反射也会带来一些潜在的风险和问题,其中之一就是反射异常(

如何利用GitLab进行项目文档管理一、背景介绍在软件开发过程中,项目文档是非常重要的资料,不仅能够帮助开发团队了解项目的需求和设计,还能提供给测试团队和客户参考。为了方便项目文档的版本控制和团队协作,我们可以利用GitLab来进行项目文档管理。GitLab是一个基于Git的版本控制系统,除了支持代码管理,还可以管理项目文档。二、GitLab环境搭建首先,我

Golang函数的反射和类型断言的应用和底层实现在Golang编程中,函数的反射和类型断言是两个非常重要的概念。函数的反射可以让我们在运行时动态的调用函数,而类型断言则可以帮助我们在处理接口类型时进行类型转换操作。本文将深入讨论这两个概念的应用以及他们的底层实现原理。一、函数的反射函数的反射是指在程序运行时获取函数的具体信息,比如函数名、参数个数、参数类型等

抖音作为一个全球知名的短视频社交平台,靠着其独特的个性化推荐算法赢得了广大用户的青睐。本文将深入研究抖音视频推荐的价值和原理,帮助读者更好地了解和充分利用这一功能。一、什么是抖音推荐视频抖音推荐视频是根据用户的兴趣和行为习惯,利用智能推荐算法为用户筛选和推送个性化视频内容。抖音平台通过分析用户的观看历史、点赞和评论行为、分享记录等数据,从庞大的视频库中精选出最符合用户口味的视频进行推荐。这种个性化推荐系统不仅提高了用户体验,也帮助用户发现更多符合其喜好的视频内容,从而增强用户黏性和留存率。在这个

Python是一种灵活的编程语言,为开发人员提供了广泛的功能和工具。其强大的功能包括元编程——一种先进的技术,使开发人员能够在运行时动态地操作和生成代码。在本文中,我们将踏上高级Python元编程领域的旅程,特别关注动态代码生成和反射。通过采用这些技术,开发人员可以创建能够适应、修改甚至自省的代码,从而为创建灵活高效的应用程序开启了新的可能性世界。通过探索Python中动态代码生成和反射的概念和实际应用,我们将揭示元编程如何彻底改变开发过程,使开发人员能够生成健壮且高度适应性的代码。了解元编程元

Go语言作为一门静态类型语言,在代码编写时需要明确每个变量的类型。但是,在某些情况下,我们需要对程序中的类型进行动态的分析和操作,这时就需要用到反射机制。反射机制可以在程序运行时动态地获取程序对象的类型信息,并能够对其进行分析和操作,非常有用。但是,Go语言中反射机制也存在一些局限性,下面我们来详细了解一下。反射机制对性能的影响使用反射机制可以大大增强代

Java是一种面向对象的编程语言,代码在编译后不直接变成机器语言,而是转化为字节码。字节码是Java虚拟机(JVM)可以理解的一种二进制形式。因此,在JVM上运行的程序可以在任何平台上运行,这就是Java的跨平台性。Java字节码的特征Java字节码是一种中间代码。编译器将Java源代码转换为字节码并存储在.class文件中。字节码指令可以轻松地转换为指示任

随着计算机硬件的不断发展,处理器中的CPU核心不再单独增加时钟频率,而是增加核心数量。这引发了一个显而易见的问题:如何发挥这些核心的性能?一种解决方法是通过并行编程,即同时执行多个任务,以充分利用CPU核心。这就是Go语言的一个独特之处,它是一门专为并发编程而设计的语言。在本文中,我们将探讨如何利用Go语言进行并发编程。协程首先,我们需要了解


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

Dreamweaver CS6
视觉化网页开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Atom编辑器mac版下载
最流行的的开源编辑器