有时连接CRUD应用程序DAL

时间:2009-03-09 19:38:05

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

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

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

我在这里要求的是任何有经验的人使用这些技术中的任何一种(或者我没有列出的那种技术)来借给我你辛苦赚来的智慧。在您看来,对我来说,最好的方法是什么?有关创建此类应用程序的任何其他见解?我真的很挣这个计划的DAL部分。

谢谢!

4 个答案:

答案 0 :(得分:1)

如果存储过程按照你的意愿行事,我不得不说我怀疑你会把它们扔掉并重新实现它们。此外,在将数据复制回主数据库时,如果使用存储过程或LINQ to SQL样式数据访问,则无关紧要,因此担心您使用哪个DAL似乎是一个红色的鲱鱼。

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

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

这些都不会影响您的数据访问层:这些都是低级别(合并复制,由数据库本身提供)或更高级别(冲突解决,由您的业务规则提供解决方案)而不是您的DAL

答案 1 :(得分:0)

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

我自己从未使用过Sync框架,只是阅读了一篇文章。但这可能会为你奠定坚实的基础。但是,只要你采用数据访问的方式,businesslogic的解决方案可能会产生更广泛的影响......

答案 2 :(得分:0)

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

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

其他想法......
移动宽带怎么样?一些3G手机卡明天可以使用,你的应用程序不需要大页面/图形的更改。

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

祝你好运!

答案 3 :(得分:0)

如果SP是你的意思是存储过程...我不确定我理解你的理由是试图摆脱它们。考虑到它们是快速的,经过验证的,并且已经为您编写(即经过测试)。

当然,如果你正在创建一个模仿原作的应用程序,那么尽可能多地保留原始(工作)代码库有一定的优点 - 其中最重要的是速度。

我尝试安装数据库的本地副本,然后将所有受影响的记录从上次连接的时间段推送到主数据库,当它连接时。