我需要一些关于将XML用作小型C#应用程序的数据持久性的好方法。这是一个独立的应用程序,用户不共享相同的数据持久性,因此,文件访问是独占的。这就是我首先想到XML的原因。
我知道我的设计模式,所以如果我编写通常的图层,我可以隔离持久性,然后在需要时更改它。然后,它是一个小应用程序,所以我需要快速写它。
我应该只使用Linq来实现XML并克服它吗?如果是这样,如果我决定用嵌入式数据库替换XML,那么我的重写工作会是什么? Linq在写入XML文件时的表现如何?
但如果我不跟Linq一起去,你们会建议什么?
更新
根据我得到的评论,我可能需要指定一点。这是一个供教师使用的成绩单应用程序。这些是我的主要实体:
现在有些问题:
还有一些评论
IEnumerable<MyEntity>
与“持久性类实例”进行交互。这给了我灵活性。答案 0 :(得分:7)
我建议你:
答案 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。
这种方法很快为您提供了一个非常有用和坚实的基础。它应该足够一段时间了,但如果你以后转向基于数据库的解决方案,如果你不从头开始抽象出数据访问,你可能不得不重写它。
如果基于纯文件的解决方案还不够,请选择某种面向数据库的解决方案,最好是某种嵌入式数据库,例如SqlLite或BerkeleyDb。