【问题标题】:Architecture for database-aware Application数据库感知应用程序的架构
【发布时间】:2011-09-19 11:17:36
【问题描述】:

我正在寻找 MS SQL Server 或普通旧 ADO.NET 的“工作单元”和“存储库”模式的参考实现。但所有示例都是围绕现有上下文(如 Linq2SQL 或 EF)构建的。据我了解,这些技术本身几乎就是在实现这些模式。

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

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

为此,我的想法是创建一个具有存储库和工作单元模式的抽象层,并为每种技术创建不同的实现。

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    祝你好运!

    【讨论】:

    • 嗨,布拉德,我在原始问题下方留下了评论。
    【解决方案2】:

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

    【讨论】:

    • 是的,但这仅适用于我认为支持 ADO.NET 事务的底层数据库。如果你有一个 myIsam mySQL 数据库,我猜是非事务性的,事务范围不会产生影响。
    • 其实不是这样,TransactionScope 对象主要用于 ADO.NET,但它确实与微软的事务框架集成:msdn.microsoft.com/en-us/magazine/cc300805.aspx
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2019-01-12
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多