我正在寻找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事务,并在工作单元部分的事务中执行它们。好主意?馊主意?难做?我期待着你对此的看法。
答案 0 :(得分:1)
我不羡慕你的任务;在您的应用程序中支持多个后端数据库将是棘手的。
以下是使用ASP.NET MVC和LightSpeed的工作单元模式的示例:link
就个人而言,我会使用EF或NHibernate(更喜欢EF); SQL Anywhere支持ADO.NET和Entity Framework,因此(理想情况下)您不需要执行任何特殊操作来支持该数据库。
祝你好运!答案 1 :(得分:1)
如果您只是担心交易范围,请允许我指向System.Transactions库及其TransactionScope对象。很棒的课程。在实例化事务范围的同一线程内操作的任何sql或其他事务受管系统将自动添加到事务中。这样,如果代码的任何部分失败并抛出异常,您就不能调用scope.Complete()方法并回滚事务范围内的所有操作。非常好的课程。