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是将简单对象列表中的一系列对象值保存到数据库中。
领取专属 10元无门槛券
私享最新 技术干货