将XML用作小型C#应用程序的数据持久性的好方法是什么?

时间:2011-04-18 13:42:35

标签: c# .net xml linq

我需要一些关于将XML用作小型C#应用程序的数据持久性的好方法。这是一个独立的应用程序,用户不共享相同的数据持久性,因此,文件访问是独占的。这就是我首先想到XML的原因。

我知道我的设计模式,所以如果我编写通常的图层,我可以隔离持久性,然后在需要时更改它。然后,它是一个小应用程序,所以我需要快速写它。

我应该只使用Linq来实现XML并克服它吗?如果是这样,如果我决定用嵌入式数据库替换XML,那么我的重写工作会是什么? Linq在写入XML文件时的表现如何?

但如果我不跟Linq一起去,你们会建议什么?

更新

根据我得到的评论,我可能需要指定一点。这是一个供教师使用的成绩单应用程序。这些是我的主要实体:

  • 学生
  • 老师(应该只有一个,但我会因为未来的整合可能性而存储它)
  • 年级(每个课程的学生可以有多个年级)

现在有些问题:

  • 引擎盖下,每个实体应该有一个XML文件吗?
  • 在幕后,我应该使用Linq来实现XML吗?还有什么东西可以考虑吗?

还有一些评论

  • 我知道我应该在输入和输出上使用IEnumerable<MyEntity>与“持久性类实例”进行交互。这给了我灵活性。
  • 虽然我对建议很开心,但我真的不想考虑立即嵌入数据库。这个小应用程序是一个令人兴奋的机会,可以开始工作并在生产中尝试新事物(不仅仅是测试)而且风险很小。

3 个答案:

答案 0 :(得分:7)

我建议你:

  • 定义表示需要存储的数据的模型(一个类)(可以是层次结构)
  • 如果需要,使用序列化序列化或反序列化为XML或二进制甚至JSON。

答案 1 :(得分:3)

使用SQL Server Compact可能会容易得多 这样就可以更容易地使用Entity Framework工具,并可以选择在以后迁移到完全成熟的SQL Server。

答案 2 :(得分:2)

如果您一次编写整个文档,XML / JSON最有效,尝试追加数据也可以,但在某些时候您可能希望在文档/文件的中间插入/更新部分数据,并且那就是毛茸茸的时候。

如果您可以使用将数据读入内存的解决方案(一次或部分通过查询),然后稍后将其全部写回文件,那么它适用于单个XML / JSON文件。只要您不需要定期更新/插入/删除文件中的部分数据,文件就应该这样做(虽然性能可能是个问题)。

我多次使用的一种方法是根据自己的喜好定义 XSD架构,包括约束,数据类型等,然后设置预构建步骤为您自动生成可序列化的C#类层次结构(例如使用 XSD.exe )。使用普通的XML序列化功能,可以非常轻松地将整个文档加载(并通过XSD文档验证XML)到内存中,读取/操作它(查询/更新/插入/删除),然后将整个对象层次结构序列化进入XML。

有关 XSD.exe 的信息,请参阅this page

这种方法很快为您提供了一个非常有用和坚实的基础。它应该足够一段时间了,但如果你以后转向基于数据库的解决方案,如果你不从头开始抽象出数据访问,你可能不得不重写它。

如果基于纯文件的解决方案还不够,请选择某种面向数据库的解决方案,最好是某种嵌入式数据库,例如SqlLiteBerkeleyDb