基于.NET的轻量级ORM框架及数据库工具集(四)

ORM功能简介

一、简单对象和单表映射

DBHelper2是一个轻量级的ORM框架,提供了简单但实用的对象-关系映射功能。

仅限于简单对象,即对象的属性是由简单数据类型组成的。

一个简单类映射数据库的一张表,类的属性映射到表的字段。

在类及属性的定义中,可以加上attribute(特性),向编译器提供有关ORM的信息。attribute是不影响类的定义的,所以对源代码不构成侵害。同时,也不像NHibernate那样需要额外使用配置文件来定义ORM,所有的ORM配置信息都在源代码之内,程序之外不可见。

不熟悉.NET中的Attribute编程的同学可以参考:https://docs.microsoft.com/zh-cn/dotnet/standard/attributes/index

二、在类中定义映射

这里定义了一个类Person,它与数据库中Person.Person表对应,它的属性与表的字段对应。

1、在类定义前加入特性TableMapping,有参数:Table:="Person.Person",表示映射的表名称。如果此项省略,默认为与类同名的表。

2、只有Public(公共)类型的Property(属性)参与映射,普通字段不参与映射。

3、有一个属性加了ColumnMapping特性,参数有:PrimaryKey:=True,表示这个字段在数据库中是一个主键。同时还有Identity:=True,表示这个这段是一个自增类型的字段。自增字段在插入时不需要指定值,它会自动产生一个不断递增的唯一的值。

4、简单类中定义的属性的数据类型必须与数据库对应的字段类型兼容,否则在映射操作时无法实现类型转换而抛错。

5、ColumnMapping的另外几个参数定义

Column 如果属性名称与字段名称不同,可以由Column:="映射的字段名"来指定。默认为属性名称。

Mapping 指定在读写操作时是否参与映射:None读写都不映射,Read只在读操作时映射,Write只在写操作时映射,Both读写都映射。默认为Both。

三、简单类的数据库操作

1、Load

由于Person类已经定义了映射所需要的信息,在Load过程中,首先根据对象p所映射的表名、主键值、字段名等构成了一条SELECT语句,从DBHelper所关联的数据库中读取,读取的值一一赋给了p的映射属性。

Load操作的几个关键点:

必须NEW一个实例,并赋给主键值

如果Load成功(有记录),返回True,否则返回False

Load成功以后对象中即含有主键对应的记录的值

2、Save

此例中Person表与BusinessEntity表有继承关系,它们使用同一个主键值:BusinessEntityID,因此在保存Person对象前,需要先保存一个BusinessEntity对象,产生一个键值,将此键值赋给Person对象。

由于要保存两个对象,所以需要将它们放在一个事务中执行,如果执行失败,必须回滚事务。

Save操作分两种情况:根据主键值判断,如果数据库中存在记录,Save相当于Update,否则相当于Insert。

3、Remove

在Load, Save, Remove操作中,都是根据主键值来识别对象的。主键字段是在类定义时指定的,但是也可以临时改变。上例中需要删除FirstName="Cougar",LastName="Jiang"的记录,就临时改变了主键字段:db.Load(p,{"FirstName","LastName"})

4、ReadEntity

ReadEntity是使用原生SQL读取数据库记录,并自动转换为所对应的对象。它是一个泛型方法,可以返回指定类型的对象,提供的参数是SQL语句及其参数。

5、ReadList

和ReadEntity类似的,ReadList是使用原生SQL读取一组记录,并转换成简单对象列表。

6、SaveList

SaveList是将简单对象列表中的一系列对象值保存到数据库中。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180821B031UK00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券