设为首页 加入收藏

TOP

C#基于Linq和反射实现数据持久化框架Xml4DB
2014-11-24 01:04:13 来源: 作者: 【 】 浏览:2
Tags:基于 Linq 反射 实现 数据 持久化 框架 Xml4DB

下载Xml4DB


具体下载目录在 /2014年资料/3月/2日/C#基于Linq和反射实现数据持久化框架Xml4DB


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


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


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


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


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


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


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


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)
{
//以覆盖方式创建XmlDB
XmlDB 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 objects = mDB.Read(new Student(0, "李逍遥", 0));
//输出查询结果
Console.WriteLine(objects[0].ToString());


//将姓名为酒剑仙的对象中的姓名改为司徒钟,年龄改为40
mDB.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();
}


///


/// XmlDB演示类
///

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" >


18
1
李逍遥


37
2
酒剑仙


17
3
赵灵儿


20
4
慕容紫英


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


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇bash编程之case语句 下一篇Python 新式类与经典类的区别

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: