C#基于Linq和反射实现数据持久化框架Xml4DB(2)

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

/// <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,所以请不要给对象赋予这样的属性值,因为这样的对象将被排除,从而造成无法读取对象的问题。每一个对象实体都要默认给出一个不带参数的构造函数,因为内部构造中使用了反射技术,当根据一个类型来生成一个新实例时就会用到。希望大家会喜欢,谢谢!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/328fe87dfeca4cb26dbaaefca472c5da.html