面向对象开发过程中大家经常碰到的一个东东——数据实体。
在实体对象实例的某一个信息被修改后,面临一个数据保存的问题,网上可以搜索到很多不同的保存方法,这里提供小虾(本人)曾经用过的几种常用方法:
- 根据需要,将修改过的属性组合成SQL语句(未修改的属性不作处理),然后执行数据库命令保存数据;
- 提前写好实体对象的SQL语句,如string sql = "UPDATE TableName SET ColumnName1 = {0}, ColumnName2 = {1}, ... WHERE PK_ColumnName = {N}",然后将整个实体对象作为参数传入,将保存实体对象的SQL语句中的参数替换成相应的值,得到保存数据的SQL语句,然后调用数据库命令保存数据;
- 将实体对象实例中的每一个数据库字段属性成员的“属性名”和“属性值”通过反射的方法读取出来,然后拼接字符串,然后调用数据库命令来保存数据;
- ...(或许还有很多更加高效的数据库实体类,希望大家踊跃拍砖)。
在这里,小虾分别说说每一种方法的优缺点。
优点 缺点
第一种 1.支持差异数据保存,即只保存修改过的数据库字段; 1.需要写非常多的SQL语句。
2.由于是已经是编辑好的SQL语句,所以性能还可以。
第二种 1.不支持差异数据保存; 1.一个实体对象至少需要一个SQL语句,工作量也是很客观的。2.执行效率也还可以。
第三种 1.不支持差异数据保存。 1.同样是由于反射操作,带来的性能影响也是比较大的。
2.由于是通过反射方式来拼接SQL语句,所以省掉了
很多写sql语句的工作量。
如上三种方法都很难达到各位的需求,不知道是否更好的数据库实体设计方法,还是那句话,欢迎大家大胆拍砖!
@追加内容
哎,一个个只是支持,顶下什么的,悲惨啊!
看来还得去baidu,google了。
ASP.NET开发技术交流群: 67511751(人员招募中...)