数据库感知应用程序的体系结构

时间:2011-06-21 11:56:38

标签: c# design-patterns architecture ado.net repository-pattern

我正在寻找MS SQL Server或Plain old ADO.NET的“工作单元”和“存储库”模式的参考实现。但所有样本都是通过Linq2SQL或EF等现有上下文构建的。根据我的理解,这些技术本身几乎都在实施这些模式。

但是,如何在没有任何上下文和SaveChanges()方法的情况下处理“普通”SQL存储库?是使用TransactionScope的正确方法吗?例如,在命令列表中收集所有SQL操作,然后在Tx范围内一个接一个地执行它们......或者这太简单了?

我为什么要找这个?我的任务是构建一个数据层,既可以处理古老的Sybase数据库,也可以处理SQL Server(可能还需要与基于POCO的EF4组件一起使用)

为此我的想法是创建一个带有Repository和Unit of Work Pattern的抽象层,并为每个技术创建不同的实现。

更新: 上周我正在度假。抱歉耽搁了。今天我为此构建了我的架构的基本图片。 [link](s7.directupload.net/file/d/2570/whb7ulbs_jpg.htm)。我的想法是创建一个简单的ObjectContext,就像EF ObjectContext一样,与EF Context并行存在,并由我的存储库使用。此上下文在一种堆栈中收集ATOM Sql事务,并在工作单元部分的事务中执行它们。好主意?馊主意?难做?我期待着你对此的看法。

2 个答案:

答案 0 :(得分:1)

我不羡慕你的任务;在您的应用程序中支持多个后端数据库将是棘手的。

以下是使用ASP.NET MVC和LightSpeed的工作单元模式的示例:link

就个人而言,我会使用EF或NHibernate(更喜欢EF); SQL Anywhere支持ADO.NET和Entity Framework,因此(理想情况下)您不需要执行任何特殊操作来支持该数据库。

祝你好运!

答案 1 :(得分:1)

如果您只是担心交易范围,请允许我指向System.Transactions库及其TransactionScope对象。很棒的课程。在实例化事务范围的同一线程内操作的任何sql或其他事务受管系统将自动添加到事务中。这样,如果代码的任何部分失败并抛出异常,您就不能调用scope.Complete()方法并回滚事务范围内的所有操作。非常好的课程。