我正处于编写供多个用户使用的桌面应用程序的最早阶段。我正在寻找解决此问题的最佳方法的建议。
规范
我会将我的模型保存在一个文件中,该文件通常在映射的网络驱动器上使用。 (它用于设计道路和其他线性特征,如铁路和溪流。)
各种最终用户需要能够同时连接到文件并对其进行编辑。例如,Billy Bob 正在研究名为 US321 的道路,而 Rupert 正在研究 I40。每条道路的模型都在同一个文件中。最终用户可以“声明”任何道路名称,其中只有声明者可以编辑给定的道路。 Rupert 不能编辑 US321,而 Billy Bob 声称,但 Rupert 可以阅读 US321 作为引用。用户完成道路数据编辑后,他可以解除声明,其他人可以编辑它。
序列化的限制?
我对序列化的理解非常有限(请参阅我的个人资料)。但在我看来,对象和序列化文件之间存在一对一的关联。所以如果我使用序列化来实现它,就不可能只声明其中的一部分,也不可能只更新其中的一部分。 (这是正确的吗?如果不正确,那么我可以使用序列化,对吗?)
我正在考虑的解决方案
我正在考虑使用 SQL Server Express,我对社区对此的警告、更正或肯定感兴趣。
最终用户不必知道我在后台使用 SQL Server Express。 (我什至会将文件扩展名更改为适合我的应用程序的内容。)我会将道路加载到列表中,每条道路都是“可声明的”。声明一条道路会在数据库中标记它,以便应用程序的其他实例做出相应的 react ,有点像它是一个共享的 MS Excel 文件,多人可以同时编辑,但是(类似于 Excel)能够锁定个人工作表。
[编辑] 请参阅下面 Micah Armantrout 的非常翔实的回复。所以现在我想知道使用 Microsoft Access 作为中介数据库应用程序。
[编辑]
结论
感谢大家提供有用的回答和评论。 Micah 的回答非常有帮助,因为我没有意识到我将仅限于由一台服务器控制的文件。虽然现在它非常有意义,但我没有预料到它,如果我走那条路,我会在朝那个方向努力很多小时后搁浅。
当我第一次阅读 urbadave 的想法时,我认为它是我已经考虑过但不喜欢的东西。但想一想,这显然是最简单的做法。我只是像使用文件一样使用目录,但对我的顶级子对象具有用户透明性。但是,将我的整个模型封装到一个文件中显然很有吸引力。
所以这就是我决定要做的事情:按照 urbadave 的建议,从写入目录开始。然后稍后测试将其放入 zip 目录并使用 ZipPackage 类提取并插入单个序列化文件(或 XML 文件——我总有一天要做出的另一个决定)。
- 保罗
最佳答案
SQL 服务器可以满足您的需求,但如果您要有多个用户,则需要将机器设置为服务器。 在每台机器上都安装 sql server express 对你没有任何好处 它可能是其中一台用户机器或带有 SQL server express 的实际服务器,你需要将其设置为可在当前机器外部 Access 以按照本教程执行此操作。
如果您使用的是 Windows XP SP2 之后的任何软件,您需要按照这些说明打开防火墙的端口,这也在下面的链接中进行了讨论。
http://blogs.msdn.com/b/sqlexpress/archive/2005/05/05/415084.aspx
就共享数据而言,我的意思是看到其他人的工作。如果您不想在服务器上安装 sql server,您可以使用 MS Access,我建议您引用一篇关于何时使用哪一个的文章
关于c# - 寻求有关在同一文件中工作的多个用户的设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201298/