封装实体类

问题描述

需要写一个通用方法,传一个实体类进去可以将需要的数据插入另一个结构一样字段名不同的表中的方法.可以是见解,方法,示例.目前碰到的问题是,如何传一个事先无法确认的实力类,然后进行判断组装.

解决方案

解决方案二:
什么叫做“结构一样字段名不同的表”?字段名不同怎么就叫做“结构一样”呢?不懂。
解决方案三:
另外,“传一个实体类进去”这个也混乱。程序流程是面向对象的,不是面向对象类的。
解决方案四:
A表id(int)name(nvarchar50)age(int)1张三202李四233王五22B表num(int)nickname(nvarchar50)nianling(int)现在我要写一个通用的方法.它要实现的功能是.我给它一个A表实体.它根据id号将idnameage1张三20插入B表.
解决方案五:
因为有多组表需要这样做,所以需要一个通用的方法去实现这些功能
解决方案六:
要么顺序匹配,要么字符包含匹配
解决方案七:
顺序是匹配的
解决方案八:
publicTSetValueByS<S,T>(Ssource)where:Tnew(){Tt=newT();PropertyInfo[]spiArr=typeof(S).GetProperties(),tpiArr=typeof(T).GetProperties();for(inti=0;i<spiArr.Length;i++){tpiArr.SetValue(spiArr.GetValue(source),t);}returnt;}

大概意思,没测试
解决方案九:
这跟你怎样“插”有关系,不可能什么都凭空制造,总要交代一下脚踩实地在哪里,哪怕你是踩在烽火轮上。比如说你使用Ado.NET,所谓常见的SqlHelper中的代码,那么大致可以这样写voidRunSqlServerCommand(stringsql,objectobj,Action<SqlParameterCollection,object>setter){using(varconn=GetMyDbConnection()){varcmd=conn.CreateCommand();cmd.CommandText=sql;cmd.CommandType=System.Data.CommandType.Text;if(setter!=null)setter(cmd.Parameters,obj);cmd.ExecuteNonQuery();}}

或者如果是一对象封装的方式,也可以使用事件方式来实现这里的setter。总之是把将来才需要扩展实现的流程作为回调方法。例如我们可以把setter作为一个static变量复用(省得在城里里到处重复写),然后可以这样在创建了一个新的object之后使用数据库classMyType{publicstringFieldA;publicDateTimeFieldB;publicintFieldC;}publicstaticAction<SqlParameterCollection,object>DeleteMyTypeObject=(ps,obj)=>{ps.Add("@P",System.Data.SqlDbType.Int).Value=((MyType)obj).FieldC;};voidtest(){MyTypex=newMyType{FieldC=1234};RunSqlServerCommand("deletefromabcwheremc>@P",x,DeleteMyTypeObject);}

设计要扩展,但无需反射。不过其实ado.net非常简单,我才懒得写SqlHelper呢。
解决方案十:
其实对于“通用方法”,如果你凭空想要一个通用方法,就会痴迷于不切实际、性能低下上百倍的所谓技术。然而如果你基于实际测试,会发现很多凭空出来的“通用方法”是不对的。

时间: 2024-11-13 08:49:43

封装实体类的相关文章

封装-java web项目中用户实体类定义

问题描述 java web项目中用户实体类定义 在java web项目中,都有用户信息封装在用户实体类中.然后在控制类中多个方法都需要调用这个用户实体类.那么,第一种方案:我可以将这个用户实体类定义成全局变量,并在第一次登录的时候赋值,然后在之后的方法中就可以直接调用该全局变量.第二种方案:在登录的时候将用户实体类存入session中,然后在其他方法调用时,从session中取出该实体.请问这两种方案应该用哪种?如果是第二种,那是否应该将该用户实体定义为全局变量,然后在每次需要调用时,从sess

hashmap-ListView 里面嵌套了一层ListView 如何写实体类呢

问题描述 ListView 里面嵌套了一层ListView 如何写实体类呢 左边的是别人用HashMap写的 右边是我想换成封装成实体类的时候 提示不能获取id 请问如何获取呢

掌握 ASP.NET 之路:自定义实体类简介

asp.net 摘要:有些情况下,非类型化的 DataSet 可能并非数据操作的最佳解决方案.本指南的目的就是探讨 DataSet 的一种替代解决方案,即:自定义实体与集合.(本文包含一些指向英文站点的链接.) 本页内容引言 DataSet 存在的问题 自定义实体类 对象关系映射 自定义集合 管理关系 高级内容 小结 引言ADODB.RecordSet 和常常被遗忘的 MoveNext 的时代已经过去,取而代之的是 Microsoft ADO.NET 强大而又灵活的功能.我们的新武器就是 Sys

ASP.NET中实现根据匿名类、datatable、sql生成实体类

  这篇文章主要介绍了ASP.NET中实现根据匿名类.datatable.sql生成实体类,这个小小工具类非常实用,使用起来也很方便,需要的朋友可以参考下 在开发中可能会遇到这几种情况: 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要先建一个类 ,头痛 4.如果通过代码生成器要写模版,需要安装或者不想生成一堆不用的类 为了解决上面的不便之处,我封装了一个实体生成类,可以扔到

ASP.NET JSON字符串与实体类的互转换的示例代码

 本篇文章主要是对ASP.NET JSON字符串与实体类的互转换的示例代码进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 还是先封装一个类吧! 这个类网上都可以找到的!有个这个类,一切都将变得简单了,哈哈. 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime.Serialization.Json; using Sys

DataTable填充实体类返回泛型集合

     昨天找坤哥看到我的一段代码,如下:           稍微解释下,这段代码时D层查询结束后,将datatable查询到的结果赋值给实体对象的属性,然后返回实体的过程,坤哥看了之后问我,如果实体有500多个属性,难道也要这样一条一条的写吗?如果返回多个实体时怎么办?这时,我才意识到自己的代码时非常有问题的,原来设计的是每个方法最多返回一个实体,但是当遇到查询到多条记录的时候,就又冒着破坏三层结构的事返回Datatable去了,真的是很有问题啊.      怎么改,我脑海中一下子就浮现了

ASP.NET自带对象JSON字符串与实体类的转换_实用技巧

关于JSON的更多介绍,请各位自行google了解!如果要我写的话,我也是去Google后copy!嘿嘿,一直以来很想学习json,大量的找资料和写demo,总算有点了解! 切入正题! 还是先封装一个类吧! 这个类网上都可以找到的!有个这个类,一切都将变得简单了,哈哈. using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Runtime.Serializ

Mybatis实体类和表映射问题(推荐)_java

本文是小编给大家带来的mybatis中实体类和表映射问题的知识,学习本教程能够快速帮助我们解决字段名与实体类属性名不相同的冲突问题,需要的朋友一起看看吧! 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, order_price) VALUES('a

MyBatis学习教程(四)-如何快速解决字段名与实体类属性名不相同的冲突问题_java

在项目开发中,我们经常会遇到表中的字段名和表对应实体类的属性名称不一定都是完全相同的情况,下面小编给大家演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突问题,感兴趣的朋友一起学习吧. 一.准备演示需要使用的表和数据 CREATE TABLE orders( order_id INT PRIMARY KEY AUTO_INCREMENT, order_no VARCHAR(20), order_price FLOAT ); INSERT INTO orders(order_no, or