在写本章前先去网上找了一下关于ORM的相关资料,以为本章做准备,发现很多东西今天才了解,所以在这里也对ORM做不了太深入的分析,但还是浅谈一下EFW框架中的设计的简易ORM;文中有一点讲得很有道理,Dao与ORM的区别,Dao是对数据库操作的封装,编写的代码方式像一种设计方法,而ORM支持对象与数据结构的映射,更像一种代码开发工具,有了这个工具会让我们开发代码更简单方便;但是同一类工具有简单的也有复杂的,比如文字工具有简单的Notepad,也有复杂的Word,不是说有了复杂的简单的工具就不需要了,这要看你具体的场合了,你就只是想记录几段文字肯定用Notepad就已经足够了;同样道理,EFW框架中的ORM就想一个Notepad,如果在开发中想解决复杂的数据问题怎么办,那么建议你结合框架中的DAO方式一起使用;
本文要点:
1.简易ORM包含哪些功能
2.如何使用
3.实体的自定义标签TableAttribute和ColumnAttribute
4.接口IORM和实体抽象基类AbstractEntity
5.ORM解析,根据实体标签配置生成相应SQL语句
6.简易ORM对比其他ORM好处
接下来我将从下面几个方面对框架中的ORM进行说明:
在我的想法中ORM主要是实现实体与数据库表之间数据转换的工具,让我们对数据库的操作不需要编写SQL语句,只要操作实体就可以了;而实体操作数据库又可以分为一对一单表操作、一对多多表操作,多对多关联表操作等等;而在本框架中只是实现了单表操作,但对其他操作方式怎么办了,就需要结合框架中的DAO来完成;还有在单表操作中,支持外键ID转换为名称显示;
ORM设计类关系图
2.如何使用
首先创建实体类,并配置好与数据库表的映射,但实体较多的时候此操作可以用一些代码生成工具来完成;
Book实体
1 [Serializable] 2 [Table(TableName = "Books", EntityType = EntityType.Table, IsGB = true)] 3 public class Book : EFWCoreLib.CoreFrame.BusinessArchitecture.AbstractEntity 4 { 5 private int id; 6 [Column(FieldName = "Id", DataKey = true, Match = "", IsInsert = false)] 7 public int Id 8 { 9 get { return id; } 10 set { id = value; } 11 } 12 private string bookName; 13 [Column(FieldName = "BookName", DataKey = false, Match = "", IsInsert = true)] 14 public string BookName 15 { 16 get { return bookName; } 17 set { bookName = value; } 18 } 19 private decimal buyPrice; 20 [Column(FieldName = "BuyPrice", DataKey = false, Match = "", IsInsert = true)] 21 public decimal BuyPrice 22 { 23 get { return buyPrice; } 24 set { buyPrice = value; } 25 } 26 private DateTime buyDate; 27 [Column(FieldName = "BuyDate", DataKey = false, Match = "", IsInsert = true)] 28 public DateTime BuyDate 29 { 30 get { return buyDate; } 31 set { buyDate = value; } 32 } 33 private int flag; 34 [Column(FieldName = "Flag", DataKey = false, Match = "", IsInsert = true)] 35 public int Flag 36 { 37 get { return flag; } 38 set { flag = value; } 39 } 40 }