简单数据访问层

3

有人能推荐一个简单的数据访问层(C# .NET)吗?不想使用Microsoft应用程序数据访问块,因为它似乎非常臃肿和过度。也不想出于各种原因使用LINQ to SQL。我想在此基础上构建我们自己的内部ORM。过去,我总是已经构建好了数据访问层,所以从未参与过构建...


MS数据访问块似乎有些过度设计了?它只是ado.net的一个薄包装器。 - dotjoe
9个回答

7
其他个人和组织已经花费数月或数年时间开发自己的ORM和技术 - 其中许多您已列出 - 并且许多可以免费使用。您应该将资源投入核心应用程序逻辑,而不是尝试构建另一个名为ORM的整体。有足够的选择来满足各种应用程序的需求。
您说过您从未参与构建过自己的数据访问层(DAL)。为了避免上述原因(不一定是知识,而是时间和资源),尝试自行开发ORM是一个经典的起步错误。如果您认为某些现有产品似乎过于复杂,请等到您深入了解自己构建ORM的复杂性。
然而,如果您想在ORM市场上竞争,并且这就是您的产品,那么请继续前进。这是我的两分钱。
编辑:如果您担心在项目中被绑定到某个ORM产品或服务,您可以简单地将您选择的任何软件隐藏在接口后面,并根据需要切换其他ORM...
public interface IBusinessDataOperations {
   // hides any ORM of choice
}

如果有一天你有空闲时间,并想要构建自己的ORM,即使尝试其他产品后,你也可以将其插入到这个接口背后。


是的,我同意许多人已经创建了ORM,虽然我同意它们有很多优点,但我处于一个团队领导不喜欢它们的情况下。我在以前的公司使用了代码生成器,它非常有帮助,所以我对它如何组合以及如何处理像急切加载、延迟加载等明显问题有很强的想法。然而,我需要的是基本的Sql数据访问,即使在五年左右的.NET开发中...我从来没有真正去做过。 - user203538
是的,听起来你对必要的东西很熟悉。数据访问层(DAL)和对象关系映射(ORM)通常密切相关,选择其中一个可能会影响另一个。我最后能提供的最好建议是 - 无论你的团队最终做出什么选择 - 使用编程接口来抽象化细节,以便将来在整个区域中具有灵活性。这里的许多其他回答者已经概述了更实用的关于直接与DAL和ORM实现交流的建议。顺便说一下,我认为这对我们任何人来说都是一个非常难的问题 - 总是会这样。 - John K

3

您是否想要使用Linq?

您是否想要使用DataSets / DataTables?

您是否想要使用代码生成器(自己的或他人的)?

您是否想要使用存储过程?

老实说,如果您不在意任何高级功能并且不介意这个过程的单调乏味,那么从头开始构建自己的DAL/ORM并不难。但您可能需要有点疯狂。 :)

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


我不介意使用LINQ,但只有在它有益处的情况下才使用(不考虑LINQ to SQL)。我认为需要使用DataSets,因为我需要批处理语句并返回多个表。我计划使用CodeSmith,但会编写自己的代码来生成模板结构等。我想使用存储过程,例如: CompanyList CompanyGetByIDAddressList AddressLisyByCompanyID但我会根据上下文进行批处理语句(急切加载)。不想使用SubSonic、EntityFramework或NHibernate,因为我以前使用它们时感觉非常臃肿,而且团队领导也不赞成。 - user203538
我认为CodeSmith是一个不错的选择。最有可能帮助你的是找到一些类似于你想要的功能的CodeSmith模板,并从那里开始。很抱歉我不能提供更多的帮助。 - Michael Maddox

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

ADO.NET Entity Framework,微软的ORM(.NET 3.5 SP1中发布)
Base One Foundation Component Library,免费或商业
BCSEi ORM Code Generator,免费或商业
Business Logic Toolkit for .NET,开源
Castle ActiveRecord,.NET的ActiveRecord,开源
DataObjects.Net v4.0,开源,商业
DevForce,商业,N-Tier
Developer Express,eXpress Persistent Objects(XPO)
EntitySpaces,商业
Euss,开源
Habanero,免费开源
iBATIS,免费开源
Invist,免费的ORM和代码生成工具
LLBLGen,开源驱动程序,商业
LightSpeed,免费或商业
Neo,开源
NConstruct,商业
NHibernate,开源
Opf3,免费和商业
ObjectMapper .NET,GPL和商业许可证
OpenAccess,免费或商业 TierDeveloper,免费的ORM和代码生成工具
Persistor.NET,免费或商业
Quick Objects,免费或商业
Sooda,开源;BSD许可证
Subsonic,开源
Orasis,免费试用或购买。
Telerik,快捷或购买。
CSLA.NET,免费。
ECO,免费或商业
nhydrate,开源
.netTiers,开源
dapper-dot-net,开源
codesmithtools plinqo,开源


@Stafford Williams,修复了链接。 - Amr Elgarhy

1
如果你需要避免使用 Linq,可以看一下 SubSonic 2.x 版本。这是一个简单/轻量级的 ORM,你可以在此基础上构建自己的项目。既然有这样优秀的代码,为什么还要自己造轮子呢?

1
实际上,我发现最简单的SQLHelper文件是早期的MS Data Access Application Block。解压并打开解决方案后,您会发现只有一个名为SQLHelper.cs的文件,它基本上只是用自己编写的DAL包装了许多原始ADO。这是最佳实践代码(当时是的),很容易转换为.NET 2.0框架及以上版本。将SQLHelper放入您的解决方案后,您可以轻松地添加自己的数据访问组件来执行基本的CRUD操作,但您不必担心打开连接或数据集等底层编码。
我知道你在想什么,为什么要建议这个,因为你说你不喜欢这些块。好吧,这是我找到的唯一一个不使用提供程序工厂和所有你认为是过度的额外代码的块。这个块只适用于SQL Server,所以请记住这一点。但总的来说,您可能会发现这是您项目的良好起点。
这里是该块本身的下载链接

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


1

看看DbExtensions,你可以使用它来简化数据访问层代码,或者在其基础上构建自己的ORM。


0

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

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

但说实话,一旦查询变得庞大或复杂,或者对象中有很多字段,最好让适当的DAL / ORM来处理,并集中精力处理应用程序。


0

在做出决定之前,有一些问题你必须自问,而不仅仅是是否需要使用Linq或MS数据访问层,以下是其中的一些问题:

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

几年前,我为我所工作的公司构建了一个DAL,结果比我想象的要容易得多,它是基于反射的ORM,目前支持许多数据库,如SqlServer、Oracle、PostgreSql和SqLite,我可以与你分享代码,这可能有助于你构建自己的DAL或根据需要进行扩展。

如果你有时间,构建自己的DAL会对你有很大的学习收获,你将学习一些SQL和语言的几个特性,也许你以后再也用不到了。

祝你好运...


我会使用XML文件,这是我在以前的公司作为映射使用的 - 效果非常好。如果您有代码可以分享,那对我和其他人作为起点肯定非常有帮助。请发送至kitkat_robins(at)hotmail点com。 - user203538
你能发给我吗? - user203538


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接