【问题标题】:Sometimes Connected CRUD application DAL有时连接的 CRUD 应用程序 DAL
【发布时间】:2010-10-12 06:40:12
【问题描述】:

我正在开发一个有时连接的 CRUD 应用程序,该应用程序主要由社会工作者和护士团队 (2-4) 使用,以计划的形式跟踪患者信息。该应用程序是在我之前创建的 ASP.Net 应用程序的重新可视化。 4 个数据库中大约有 200 个表。 Web App 版本严重依赖 SP,但由于此版本是一个 winform 应用程序,它将指向本地数据库,我认为没有理由继续使用 SP。另外值得注意的是,我曾计划使用合并复制来处理同步部分,这两者似乎存在一些问题。

我正在尝试了解 DAL 使用什么方法。我最初计划使用 LINQ to SQL,但我读过一些花絮,说明它在有时连接的设置中不起作用。因此,我一直在尝试阅读和尝试多种解决方案; SubSonic,NHibernate,实体框架。这是一个相对简单的应用程序,并且由于“迫在眉睫”的版本 3 重新设计,这项工作可能是边缘“一次性”。这里的重点是尽快启动和运行桌面版本。

我在这里要问的是任何有任何使用这些技术(或我没有列出的技术)经验的人,向我提供你来之不易的智慧。在您看来,我最好的方法是什么?关于创建此类应用程序的任何其他见解?我真的在为这个程序的 DAL 部分苦苦挣扎。

谢谢!

【问题讨论】:

  • 当 .net 1.1 还是新的时候,微软曾经有过一些关于这个用例的技术演示。我认为他们称之为断开连接的记录集。目前没有时间谷歌,但我稍后会检查。

标签: c# winforms linq data-access-layer


【解决方案1】:

如果存储过程按照您的意愿执行,我不得不说我怀疑您是否会通过丢弃它们并重新实现它们来获得好处。此外,在将数据复制回主数据库时,使用存储过程或 LINQ to SQL 样式的数据访问应该没有关系,因此担心使用哪个 DAL 似乎是一个红鲱鱼。

有时连接的应用程序的棘手部分是提出一个好的冲突解决系统。我的建议:

  • 始终使用 RowGuids 作为表的主键。如果您始终拥有唯一键控的新记录,则合并复制效果最佳。
  • 意识到合并复制只能做这么多:将不同系统中的新数据整合在一起非常棒。它甚至可以找出单方面的更新。它不能神奇地确定你的新记录和我的新记录实际上是一样的,它也不能真正处理双方的变化,而无需人工干预或优先级规则。
  • 因此,您将需要“匹配”规则来解析声称是新的但实际上不是的记录。请注意,这是一个模糊的步骤:您很少能依靠唯一的密钥在双方都输入完全相同且没有错误。这意味着在许多指标相同或相似的情况下进行加权匹配。
  • 解决冲突和匹配“新”记录与原始记录的用户界面需要易于操作。我使用的东西看起来类似于许多源代码控制系统使用的经典三路合并:Record A、Record B、Merged Record。他们可以通过单击标题按钮将合并记录默认为 A 或 B,也可以通过单击它们来选择每个字段。最后,Merged Records 字段可供编辑,因为有时您需要从 A B 中获取部分地址(例如)。

这些都不会对您的数据访问层产生丝毫影响:这都是比您的 DAL 更低级别(合并复制,由数据库本身提供)或更高级别(冲突解决,由您的业务规则提供用于解决) .

【讨论】:

    【解决方案2】:

    如果您可以在本地安装数据库系统,请选择您熟悉的东西。我认为最大的问题是同步和合并部分。您必须考虑几种可能性: 更改了其他人在服务器上删除的内容。谁来决定?

    我自己从未使用过 Sync 框架,只是阅读了一篇文章。但这可能会给你一个坚实的基础。但是,无论您采用哪种方式访问​​数据,业务逻辑的解决方案都可能会产生更广泛的影响......

    【讨论】:

      【解决方案3】:

      微软在 2004 年推出了一个名为 issueVision 的示例应用程序。
      http://windowsclient.net/downloads/folders/starterkits/entry1268.aspx

      在 joelonsoftware.com 的旧线程上找到链接。 http://discuss.joelonsoftware.com/default.asp?joel.3.25830.10

      其他想法...
      移动宽带呢?几张 3G 蜂窝卡明天就可以使用了,您的应用无需更改大页面/图形。

      该领域使用的 Excel 电子表格。 DTS 或 SSIS 将数据导入应用程序。虽然创建了“更好”的解决方案。

      祝你好运!

      【讨论】:

        【解决方案4】:

        如果您所说的 SP 是指存储过程...我不确定我是否理解您试图摆脱它们的原因。考虑到它们速度快、经过验证并且已经为您编写(即经过测试)。

        当然,如果您要制作一个模仿原始代码的应用程序,那么保留尽可能多的原始(工作)代码库是绝对有好处的——其中最不重要的是速度。

        我会尝试安装数据库的本地副本,然后在连接后将自上次连接期间以来的所有受影响记录推送到主数据库。

        【讨论】:

          猜你喜欢
          • 2022-11-25
          • 2010-09-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-12-03
          • 2021-04-29
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多