我们知道目前大部分的数据库都是关系型数据库, 所谓关系型数据库,就是指建立在关系模型 基础之上的数据库系统,如Oracle、SQL Server、Access、MySQL等。关系模型就是指二维表格模型,因而一个关系型数据库就是由二维表及其之间的联系组成的一个数据组织。一个偶然的机会我接触到了DB4O,它是一个完全面向对象的开源数据库,它的出现完全颠覆了传统的数据库在人们心中的形象,因为传统的数据库需要在数据体、实体之间转换,而且需要映射文件提供映射关系。正是这个项目让我产生了编写Xml4DB的想法,从这个名字我们可以看粗,它是基于Xml的形式来实现存储的。我们知道,将一个对象以一定的形式存储称为序列化、反之则成为反序列化,因此反射是整个项目中最为有趣和强大的基础。由于数据库需要查询,所以Linq成为了我设计这个项目的首选,Xml4DB在使用上力求简单,参考了DB4O的优雅的方法。

下载Xml4DB

接下来呢,我们就来演示下如何使用Xml4DB吧。在Xml4DB中只有两个重要的类:XmlDB和XmlDBFactory,我们只需要使用XmlDBFactory就可以实现对XmlDB的创建。XmlDBFactory是一个静态工厂类,提供了三个方法:

1、CreatXmlDB()方法以覆盖式的方式创建数据库。当数据库文件不存在时,则创建数据库,如果数据库存在,则对数据库进行覆盖操作。此方法适合第一次创建数据库时使用。

2、LoadXmlDB()方法用于获取一个已经存在的数据库,如果数据库文件不存在将引发异常。

3、UpdateXmlDB()以升级方式创建XmlDB数据库,前提是数据库文件已经存在,且新创建的数据库的版本要比之前的版本高。

介绍完工厂类,我们来讲解数据库类XmlDB,在此类中我们定义了常见的数据库方法:

1、Insert()方法用于向数据库中插入一个对象

2、Read()方法用于从数据库读取一个或多个对象,返回List<T>

3、Delete()方法用于从数据库中删除一个或多个对象

4、Update()方法用于将一个或多个对象的值修改为对应的相同类型的值

下面我们给出一个示例程序代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
using Xml4DB;namespace Xml4DB.Sample
{class Program{static void Main(string[] args){//以覆盖方式创建XmlDBXmlDB mDB = XmlDBFactory.CreatXmlDB("XmlDB示例程序","D:\\XmlDB演示程序\\Sample.xml",1);//创建Student对象李逍遥Student mStudent = new Student(1, "李逍遥", 18);//插入Student对象李逍遥mDB.Insert(mStudent);//创建Student对象酒剑仙mStudent = new Student(2, "酒剑仙", 37);//插入Student对象酒剑仙mDB.Insert(mStudent);//创建Student对象赵灵儿mStudent = new Student(3, "赵灵儿", 17);//插入Student对象赵灵儿mDB.Insert(mStudent);//创建Student对象慕容紫英mStudent = new Student(4, "慕容紫英", 20);//插入Student对象慕容紫英mDB.Insert(mStudent);//提交修改mDB.Commit();//查询姓名为李逍遥的Student对象List<Student> objects = mDB.Read(new Student(0, "李逍遥", 0));//输出查询结果Console.WriteLine(objects[0].ToString());//将姓名为酒剑仙的对象中的姓名改为司徒钟,年龄改为40mDB.Update(new Student(0, "酒剑仙", 0), new Student(0, "司徒钟", 40));//删除ID为3的对象记录mDB.Delete(new Student(3, null, 0));mDB.Commit();//读取全部的Student记录objects = mDB.Read(new Student());foreach (Student obj in objects){Console.WriteLine(obj.ToString());}//等待以便观察结果Console.ReadKey();}/// <summary>/// XmlDB演示类/// </summary>public class Student{public Student(){}public Student(int mID,string mName,int mAge){this.mID = mID;this.mName = mName;this.mAge=mAge;}private int mAge;public int Age{get { return mAge; }set { mAge = value; }}private int mID;public int ID{get { return mID; }set { mID = value; }}private string mName;public string Name{get { return mName; }set { mName = value; }}public override string ToString(){return string.Format("ID={0},Name={1},Age={2}", this.ID, this.Name,this.Age);}}}
}

怎么样?是不是感觉很简单呢?这个项目采用了Xml作为数据存储的格式,所以最终的数据库文件就是一个Xml文件(这和序列化、反序列化类似),就像下面这样:

<?xml version="1.0" encoding="utf-8"?>
<XmlDB DBName="XmlDB示例程序" DBVersion="1"><Student><Age>18</Age><ID>1</ID><Name>李逍遥</Name></Student><Student><Age>37</Age><ID>2</ID><Name>酒剑仙</Name></Student><Student><Age>17</Age><ID>3</ID><Name>赵灵儿</Name></Student><Student><Age>20</Age><ID>4</ID><Name>慕容紫英</Name></Student>
</XmlDB>

由于假期时间有限,所以目前这个项目只提供了对整型和字符型的基础类型的支持,后面将增加对它基本类型的支持;由于目前部分算法并不完善,所以目前这个项目不支持嵌套的类型属性,等后面有时间的话会逐步完善这个项目的。需要注意的是,在这个项目中整型的默认值为0,字符型的默认值为null,所以请不要给对象赋予这样的属性值,因为这样的对象将被排除,从而造成无法读取对象的问题。每一个对象实体都要默认给出一个不带参数的构造函数,因为内部构造中使用了反射技术,当根据一个类型来生成一个新实例时就会用到。希望大家会喜欢,谢谢!

C#基于Linq和反射实现数据持久化框架Xml4DB相关推荐

  1. MVC之实体框架(数据持久化框架)EntityFrameWork(EF)

    EF - EntityFrameWork 中文名:实体框架(数据持久化框架) 1.使用EF查询(Linq to EF) 1.1使用标准查询运算符来查询 OumindBlogEntities db = ...

  2. 数据持久化框架为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框 ...

  3. jooq实体 和mysql_几个数据持久化框架Hibernate、JPA、Mybatis、JOOQ的比较

    因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template. Hibernate ...

  4. 后端技术:数据持久化框架为什么放弃 Hibernate、JPA、Mybatis,最终选择 JDBCTemplate!...

    因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template. Hibernate ...

  5. 后端开发:数据持久化框架为什么放弃Hibernate、JPA、Mybatis,最终选择JDBCTemplate!...

    因为项目需要选择数据持久化框架,看了一下主要几个流行的和不流行的框架,对于复杂业务系统,最终的结论是,JOOQ是总体上最好的,可惜不是完全免费,最终选择JDBC Template. Hibernate ...

  6. ELDataQuery 基于.NET 2.0的数据查询框架 雏型

    最近蒙生开发一个基于.NET Framework2.0下的数据查询框架.虽然是力求ELDataQuery能够让开发人员满意,但由于没有太多业余时间,只尝试着做了一点点,现在ELDataQuery已经完 ...

  7. android数据持久化框架,Android:数据持久化、Environment、SharedPreferences、内部存储internalStorage...

    1.数据持久化-SDCard//数据持久化-SDCard findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @ ...

  8. 持久化框架数据持久化框架(JPA)及其具体实现

    时间紧张,先记一笔,后续优化与完善. 对于数据的持久化问题,我们很容易想到,也很长用到持久化框架jpa. 持久化框架实现起来重要包括以下几个部分 1开发持久化bean Persistence.xml ...

  9. java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架

    JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...

最新文章

  1. kill -9 进程杀不掉,怎么办?
  2. Visual Transformers: Token-based Image Representation and Processing for Computer Vision
  3. 扩展webupload插件,增加ui界面
  4. Google和IMAX放弃VR相机
  5. 建立数组并写入数据_VBA学习笔记19:数组1
  6. Netty工作笔记0064---WebSocket长连接开发3
  7. golang fatal error: all goroutines are asleep - deadlock!
  8. js二(多)叉树算法
  9. App.config配置详解
  10. PASCAL VOC2012数据集分析
  11. 8 9区别 endnote7_EndNoteX9使用进阶七:全文查找下载和统计分析
  12. ZT - 谷歌微软等三巨头掀电视革命:智能电视年底成真
  13. Prometheus 实战于源码分析之webHandler
  14. html5制作学生积分系统,科学网—CLASS极简教程 - 钱磊的博文
  15. ocpc php,研发相关 · 百度 oCPC 开发者文档
  16. iOS 当使用DES解密遇到和解密不一致或者为空的时候问题
  17. Excel如何设置下拉选项,并应用到整列
  18. 静态监听 lsnrctl reload
  19. “趣工厂”获得数百万元天使轮融资,梅鹤资本领投...
  20. 为什么MySql每晚12点都会弹出这个?

热门文章

  1. Java并发之AQS同步器学习
  2. 解决:mysql5.7 timestamp默认值0000-00-00 00:00:00 报错
  3. 一家世界500强企业为什么还要做不赚钱的生意?
  4. 【App 支付】交易查询接口
  5. 学习笔记 十一 : iscsi
  6. oracle数据库服务器启动后需执行的命令(SecureCRT中执行)
  7. fortigate的RADIUS域用户的组认证为SSL×××用户(上)
  8. ASP.NET基础教程-C#与JAVA的比较
  9. 2019年第一份DApp调查报告出炉
  10. fabricjs上手指南