将XML用作小型C#应用程序的数据持久性会有什么好处?

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

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

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

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

更新

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

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

现在有些问题:

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

还有一些评论

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

我建议你:

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

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

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

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

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

有关XSD.exe的信息,请参阅此页面 。

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

如果纯粹的基于文件的解决方案还不够,那就去寻找某种面向数据库的解决方案,最好是某种嵌入式数据库,例如SqlLite或BerkeleyDb 。