【问题标题】:Simple Data Access Layer简单数据访问层
【发布时间】:2010-12-13 11:15:05
【问题描述】:

谁能推荐一个简单的数据访问层(C# .NET)?不热衷于使用 Microsoft 应用程序数据访问块,似乎非常臃肿和矫枉过正。由于各种原因也不想使用 LINQ to SQL。出于各种原因,我想在此基础上创建我们自己的内部 ORM。在过去,我一直都已经构建了数据访问层,因此从未参与构建......

【问题讨论】:

  • MS 数据访问块似乎有点矫枉过正?这只是 ado.net 的一个薄包装。

标签: .net orm data-access-layer


【解决方案1】:

您希望能够使用 Linq 吗?

你想使用数据集/数据表吗?

您想使用代码生成器(您自己的还是其他人的)?

你想使用存储过程吗?

老实说,只要您不关心任何类型的高级功能并且您不介意过程中令人麻木的单调乏味,从头开始开发您自己的 DAL/ORM 并不难。不过你得有点疯狂。 :)

我假设您也不想使用 SubSonic、EntityFramework 或 NHibernate 之类的东西,但如果这是一个错误的假设,请纠正我。

【讨论】:

  • 我不介意使用 LINQ,但它增加了好处,而不仅仅是因为......(LINQ to SQL,是不行的)。我假设需要数据集,因为我需要批处理语句并返回多个表。我打算使用 CodeSmith,但是编写自己的代码来生成模板结构等。我想使用存储过程,例如CompanyList CompanyGetByID AddressList AddressLisyByCompanyID 但我将根据上下文(急切加载)批处理语句。不想用SubSonic,EntityFramework,或者NHibernate,以前用过的看起来很臃肿,Team leader 在这里是不行的。
  • 我认为 CodeSmith 对你来说是个不错的选择。最有可能帮助您的是找到一些 CodeSmith 模板,这些模板可以执行与您想要的类似的操作并从那里开始。抱歉,我帮不了你了。
【解决方案2】:

其他个人和组织已经花费了数月或数年的时间来开发自己的 ORM 和技术(您列出了其中许多),而且许多都可以免费使用。您应该将资源用于核心应用程序逻辑,而不是尝试构建另一个名为 ORM 的完整野兽。那里有足够的产品来满足各种应用程序。

您说您从未参与过构建您的 DAL。由于上述原因,尝试滚动您自己生成的 ORM(就时间和资源而言,不一定是知识)是一个典型的开始错误。如果您认为现有产品中的某些产品似乎有些矫枉过正,请等到您开始构建自己的复杂产品。

但是,如果您想在 ORM 市场上竞争并且这就是您的产品,那么请继续前进。这是我的 2 美分。

编辑:如果您担心绑定到项目中的某个 ORM 产品或产品,您可以简单地将您选择的任何软件隐藏在接口后面,并根据需要换入其他 ORM。 ..

public interface IBusinessDataOperations {
   // hides any ORM of choice
}

如果有一天你有一些空闲周期并且想构建自己的 ORM,即使在尝试了其他产品之后,你也可以将它滑入这个界面后面。

【讨论】:

  • 是的,我同意很多人创建了 ORM,虽然我同意有很多优势,但我处于团队领导不喜欢它们的情况下。我在以前的公司使用了一个代码生成器,它非常有帮助,所以我非常清楚它是如何拼凑起来的,以及如何解决像急切加载、延迟加载等明显的问题。然而,它是基本的 Sql 数据即使在 .NET 使用了 5 年左右之后,我仍然在追求访问权限。.. 真的不必这样做。
  • 是的,听起来您很熟悉必需品。 DAL 和 ORM 通常密切相关,其中一个的选择可能会影响另一个。我最终提供的关于 DAL 的最佳建议是——无论你的团队最终做出何种选择——使用编程接口来抽象出细节,以便在未来整个区域具有灵活性。这里的许多其他响应者已经概述了有关直接与 DAL 和 ORM 实现对话的更实用的建议。顺便说一句,我认为这对我们任何人来说都是一个非常困难的问题 - 永远都是。
【解决方案3】:

对于非常简单的要求(我的意思是简单!),我将创建一个基于存储库模式的 DAL,其中 sql 查询在存储库方法中完成,然后创建并返回简单的 POCO (Plain old CLR objects)。

如果需要,您可以调用 sprocs 或参数化 SQL。然后将数据映射到您的 poco(为此只需使用标准 SQLDataReader)

但老实说,当查询变得庞大或复杂或者您的对象中有很多字段时,您最好让适当的 DAL/ORM 承担压力并专注于您的应用程序。

【讨论】:

    【解决方案4】:

    如果您需要避免 linq,请查看 SubSonic 版本 2.x。这是一个可以构建的简单/精简的 ORM。既然有这样的好代码,为什么还要自己动手呢。

    【讨论】:

      【解决方案5】:

      实际上,我发现的最简单的 SQLHelper 文件是 2000 年代早期的 MS 数据访问应用程序块。解压缩并打开解决方案后,您会发现只有一个名为 SQLHelper.cs 的文件,它基本上只是包装了您将使用自制 DAL 编写的大量原始 ADO。它是最佳实践代码(当时是),并且可以轻松转换为 .net 2.0 框架及更高版本。将 SQLHelper 放入解决方案后,您可以轻松添加自己的数据访问组件来完成基本的 CRUD 工作,但您不必担心打开连接或数据集或其他任何东西的低级编码。

      我知道你在想什么,为什么建议这个,因为你说你不喜欢积木。好吧,这是我发现的唯一一个不使用提供程序工厂的代码,而且您所说的所有额外代码都是多余的。此块仅适用于 SQL Server,因此请记住这一点。但总的来说,您可能会发现这是您项目的一个很好的起点。

      这是块本身的download link

      祝你好运,希望这会有所帮助。

      【讨论】:

        【解决方案6】:

        在您做出决定之前,您必须在开始之前回答自己一些问题,而不仅仅是如果您不想要 linq 或 ms 数据访问层,这些都是其中的一些问题:

        • 您想要能够修改代码(生成器)还是想要一个 DAL 来为您提供访问数据库的服务?
        • 您想处理 XML 配置文件还是更喜欢基于反射的 DAL?
        • 您想要支持多个 DB 还是只支持一个特定的 DB?

        几年前,我不得不为我工作的公司构建一个 DAL,结果它比我更容易,结果是一个基于反射的 ORM,此时支持许多数据库 SqlServer、Oracle、PostgreSql 和SqlLite,我可以为您分享代码,它可以帮助您构建自己的代码或将其扩展以满足您的需求。

        如果它可以帮助您构建自己的 DAL(如果您有时间),这是一次很棒的学习体验,您将学习一些 Sql 和该语言的一些您可能永远不会再使用的特性。

        祝你好运……

        【讨论】:

        • 我会使用 XML 文件,这是我在以前的公司使用的映射 - 工作得很好。如果您有代码要分享,那对我和我相信其他人会非常有帮助.. kitkat _ robins (at) hotmail dot com
        • 请问可以发给我吗?
        【解决方案7】:

        查看DbExtensions,您可以使用它来简化 DAL 代码,也可以在上面构建自己的 ORM。

        【讨论】:

          【解决方案8】:
          【解决方案9】:

          这是一个完整的列表:ORM tools ".Net"

          ADO.NET 实体框架,Microsoft 的 ORM(随 .NET 3.5 SP1 发布)
          Base One 基础组件库,免费或商业
          BCSEi ORM 代码生成器,免费或商业
          .NET 的业务逻辑工具包,开源
          Castle ActiveRecord,用于 .NET 的 ActiveRecord,开源
          DataObjects.Net v4.0,开源,商用
          DevForce,商业,N 层
          Developer Express、eXpress 持久对象 (XPO)
          EntitySpaces,商业
          Euss,开源
          Habanero,免费开源
          iBATIS,免费开源
          Invist,免费的 ORM 和代码生成工具
          LLBLGen,开源驱动程序,商业
          LightSpeed,免费或商业
          Neo,开源
          NConstruct,商业
          NHibernate,开源
          Opf3,免费和商业
          ObjectMapper .NET、GPL 和商业许可
          OpenAccess,免费或商业 TierDeveloper,免费的 ORM 和代码生成工具
          Persistor.NET,免费或商业
          快速对象,免费或商业
          Sooda,开源; BSD 许可证
          亚音速,开源
          Orasis,免费试用或购买。
          Telerik,快递或购买。
          CSLA.NET,免费。
          ECO,免费或商业
          水合物,开源
          .netTiers,开源
          dapper-dot-net,开源
          codesmithtools plinqo,开源

          【讨论】:

          • @Stafford Williams,修复了链接
          猜你喜欢
          • 2013-10-03
          • 2013-07-04
          • 2011-10-20
          • 2012-12-15
          • 1970-01-01
          • 1970-01-01
          • 2011-11-11
          • 1970-01-01
          相关资源
          最近更新 更多