在开发ORM之前,先简单的介绍下ORM的基本概念。
对象关系映射(Object Relational Mapping,简称ORM)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外 一种形式。
产生渊源
你在DAL中写了很多的方法来读取对象数据,改变状态对象等等任务。而这些代码写起来总是重复的。看看DAL代码,你肯定会看到很多近似的通用的模式。人们就想了,能不能自动化实现DAL呢,其实大部分是可以的,所以ORM的各种工具诞生了,他们会自动为你生成dal的代码。
目前.net平台下比较流行的 ORM 产品有NHibernate,Entity Framework等。 相对于NHibernate这些重量级的ORM产品,对数据库的一张表做关系映射,就必须为其建立一张hbm.xml的映射文件,显得有些繁琐。c#支持自定义特性,对于数据库字段的一些属性关系映射,我们可以通过在Model类(数据库结构关系映射类)的属性上标注自定义特性来抽象描述数据库相关字段。
目标效果预览
数据库表结构:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using Model.Entities; 6 using System.Data; 7 namespace Model 8 { 9 [Serializable] 10 public class EmpInfoModel : BaseEntity 11 { 12 /// <summary>是否可以修改 13 /// </summary> 14 public const bool isCanMod = false; 15 /// <summary>tableName 16 /// </summary> 17 public const String TableName = "EmpInfo"; 18 public EmpInfoModel() 19 { } 20 21 private string _Id; 22 private string _Name; 23 private int? _isAllMoneyCheck; 24 private Guid? _MyGuid; 25 private Int16? _MySmallint; 26 private bool? _MyBool; 27 private string _Myntext; 28 [DBField(KeyType = DbKeyType.PK)] 29 [DBType(SqlDBType=SqlDbType.NVarChar)] 30 public virtual string Id 31 { 32 set { _Id = value; } 33 get { return _Id; } 34 } 35 36 public string Name 37 { 38 set { _Name = value; } 39 get { return _Name; } 40 } 41 42 43 public int? isAllMoneyCheck 44 { 45 set { _isAllMoneyCheck = value; } 46 get { return _isAllMoneyCheck; } 47 } 48 49 [DBType(SqlDBType = SqlDbType.UniqueIdentifier)] 50 public Guid? MyGuid 51 { 52 set { _MyGuid = value; } 53 get { return _MyGuid; } 54 } 55 56 [DBType(SqlDBType = SqlDbType.SmallInt)] 57 public Int16? MySmallint 58 { 59 set { _MySmallint = value; } 60 get { return _MySmallint; } 61 } 62 63 [DBType(SqlDBType = SqlDbType.Bit)] 64 public bool? MyBool 65 { 66 set { _MyBool = value; } 67 get { return _MyBool; } 68 } 69 [DBType(SqlDBType = SqlDbType.NText)] 70 public string Myntext 71 { 72 set { _Myntext = value; } 73 get { return _Myntext; } 74 } 75 } 76 }