我正处于编写供多个用户使用的桌面应用程序的最早阶段。我正在寻找有关解决此问题的最佳方法的建议。
规格
我会将我的模型保存在一个文件中,该文件通常会在映射的网络驱动器上使用。(用于设计道路和其他线性特征,如铁路和溪流。)
各种最终用户需要能够同时连接和编辑文件。例如,Billy Bob 正在研究名为 US321 的道路,而 Rupert 正在研究 I40。每条道路的模型都存在于同一个文件中。最终用户可以“声明”任何道路名称,其中只有声明者可以编辑给定的道路。当比利鲍勃声称时,鲁珀特无法编辑 US321,但鲁珀特可以阅读 US321 以供参考。一旦用户完成对道路数据的编辑,他可以发布声明,其他人可以对其进行编辑。
序列化的限制?
我对序列化的理解非常有限(请参阅我的个人资料)。但在我看来,对象和序列化文件之间存在一对一的关联。因此,如果我使用序列化来实现这一点,就不可能只声明它的一部分,也不可能只更新它的一部分。(这是正确的吗?如果不是,那么我可以使用序列化,对吗?)
我正在考虑的解决方案
我正在考虑使用 SQL Server Express,并且我对社区对此的警告、更正或确认感兴趣。
最终用户不必知道我在后台使用 SQL Server Express。(我什至会将文件扩展名更改为适合我的应用程序的内容。)我会将道路加载到列表中,并且每条道路都是“可声明的”。声明一条道路将在数据库中标记它,以便应用程序的其他实例做出相应的反应,有点像它是一个共享的 MS Excel 文件,多人可以同时编辑,但(类似于 Excel)能够锁定个人工作表。
[编辑] 请参阅下面的 Micah Armantrout 的内容丰富的回复。所以现在我想知道使用 Microsoft Access 作为中介数据库应用程序。
[编辑]
结论
感谢大家提供有用的答案和评论。Micah 的回答非常有帮助,因为我没有意识到我会被限制为仅由一台服务器控制的文件。虽然现在它很有意义,但我没有预料到,如果我走那条路,我会在朝那个方向工作几个小时后搁浅。
当我第一次阅读 urbadave 的想法时,我认为它是我已经考虑过但不喜欢的东西。但仔细想想,这显然是最简单的方法。我只是使用一个目录,就像它是一个文件一样,但对我的顶级子对象具有用户透明度。但显然,将我的整个模型封装到一个文件中是很有吸引力的。
所以这就是我决定做的事情:就像 urbadave 建议的那样,从写入目录开始。然后稍后测试将其放入 zip 目录并使用 ZipPackage 类提取并插入单个序列化文件(或 XML 文件——我必须有一天做出另一个决定)。
- 保罗