ORM中数据类型的无缝转换

原创 2013年12月02日 16:37:32

对于一个ORM框架来说,实体对象中或说是编程语言中的数据类型最好还是要能和数据库中的数据类型能实现自动的无缝转换,这样的好处是显而易见的,一是使用起来比较简单,减少重复性工作;二是可以充分利用编程语言(尤其是强类型的C#)的类型校验能力,可以显著减少bug。

要实现这个无缝转换,我们要做这么两件事:

1 确定转换点和转换方向;

2 确定要做哪些转换;

确定转换点很简单,就是在数据库的操作点上,也就是增删改查,更具体的就是在Insert/Delete/Update/对象的初始化函数Init_Delegate中。转换方向也很清楚,前三个函数是从c#到数据库,后一个是从数据库到c#。

应当注意的是,c#和数据库之间的数据转换我们只需要考虑简单数据类型就可以了,不需要考虑结构化的数据类型。由于和数据库的交互我们是采用的ado,所以简单的数据类型我们又可以划分为如下几种:

1 数值类型,可以直接拼入sql语句中;

2 字符串、日期、字节数组类型,应通过参数的方式进行传递;

而sql语句的拼接主要发生点在于:

Insert:主要是values子句;

Delete:主要是where子句;

Update:where和set子句;

Select:主要是where子句;

在这些子句中,我们首先要判断数据类型,然后选择是直接拼入相应子句,还是拼入参数,然后在对参数进行赋值。

从c#到数据库的转换,数值类型和字符串、日期类型都比较好处理,需要进行特殊处理的有:

1、bool型稍麻烦点:要根据其值的真假先转换为1/0,然后再传递;

2、枚举类型要先根据基类型也转换为相应的数值,然后再传递;

3、现在xml用的越来越多,所以也要能支持,要将其先转换为字节数组,然后再传递。

反过来,从数据库到c#的转换也就是上面的逆过程,由于c#在从数据库读取数据时,已经按数据库中定义的存储数据的各列的数据类型将其转换为了对应c#中的数据类型,所以我们其实只要关心刚才列举的bool、枚举、xml这三类就可以了:

1、bool比较简单,判断一下数据是否等于1就可以了;

2、枚举比较麻烦,要识别出目标类型是枚举类型,然后进行相应的转换;

3、xml就是将字节数组反向转换回来。


版权声明:本文为博主原创文章,未经博主允许不得转载。

Yii: 把ORM对象转换为JSON数据

在需要对外提供服务接口的时候,常常需要把从数据库中查询出来的数据对象转换为JSON格式的数据Yii中提供很有用的方法:CJSON::encode($object)但该方法的缺省实现不能把关联对象的数据...
  • iefreer
  • iefreer
  • 2013年02月02日 18:00
  • 4989

ORM基本概念及ORM中的映射关系

ORM(Object/Relation Mapping)解决的主要问题是对象-关系的映射。域模型和关系模型分别建立在概念模型的基础上。域模型是面向对象的,而关系模型是面向关系的,一般情况下,一个持久化...
  • u013539003
  • u013539003
  • 2015年09月08日 16:55
  • 4084

ORM规范API通用格式及禁止联表查询方案实现ORM

什么是ORM? 大部分程序员对ORM的理解就是不用写SQL,通过对象的方式来增删改查数据,这种对ORM的理解可以说是偏差很大,如果通读百度百科对于ORM的解释,没有任何描述是关于写SQL的,我们先...
  • ucoder126
  • ucoder126
  • 2017年12月13日 15:48
  • 279

Python数据类型之间的转换(三)

Python数据类型之间的转换 函数 描述 int(x [,base]) 将x转换为一个整数 long(x [,base] ) 将x转换为一个长整数 ...
  • Love_Carmen
  • Love_Carmen
  • 2017年07月28日 11:26
  • 436

PHP中的数据类型转换和类型检测

1. 自动转换 自动转换,又称隐式转换,很多情况下,PHP会根据上下文环境来对数据的类型自动进行转换。 2. 强制转换 强制转换,又称显示转换,在某些特殊情况下,需要我们手工地对数据进行...
  • lamp_yang_3533
  • lamp_yang_3533
  • 2016年03月21日 22:49
  • 553

Oracle 数据类型转换

-- Start Oracle 为每种数据类型都提供了相应的函数,一般情况下它们之间的相互转换是非常简单的,Oracle 提供的函数有: CAST 将一种类型...
  • shangboerds
  • shangboerds
  • 2015年06月19日 16:23
  • 1016

从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值报错

sql中执行varchar数据赋值到datetime时报这个错: 从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值 这个varchar格式是没错的,是因为dat...
  • u013703363
  • u013703363
  • 2017年06月16日 11:41
  • 1982

从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值——可能的解决办法

从 varchar 数据类型到 datetime 数据类型的转换产生一个超出范围的值——解决办法 今天在项目里惊醒了...
  • ahcmm2008
  • ahcmm2008
  • 2014年05月29日 16:22
  • 11395

从 datetime2 数据类型到 datetime 数据类型的转换产生一个超出范围的值

问题描述:在C#程序中将获取到的时间,存入到数据库,于是就遇到了这个问题。 问题分析:datetime和datetime2都是时间格式,只不过在C#的EF框架中,默认的是datetime2类...
  • iimzhouyang
  • iimzhouyang
  • 2017年09月12日 15:17
  • 104

关于2147217913 从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界 的问题解决方法

最近收到玻利维亚客户的反馈,运行程序时总提示:2147217913:La conversión del tipo de datos char a datetime produjo un valor d...
  • derryzhang
  • derryzhang
  • 2009年06月29日 10:14
  • 7840
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORM中数据类型的无缝转换
举报原因:
原因补充:

(最多只允许输入30个字)