2010-06-09 40 views
1

我一直在寻找一个简单的解决方案,尽我所能倾向于NHibernate的东西,但到目前为止,我发现的一切似乎试图解决一个稍微不同的问题。以下是我在当前项目中看到的内容:生成简单的只读DAL?

我们有一个IBM iSeries数据库作为用于我们的核心业务(金融机构)的第三方软件套件的主要存储库。我的团队所做的一部分工作就是编写能够以某种方式报告或输入大量数据的应用程序。在过去,我们一直在手动创建ADO .NET连接(顺便说一句,我们使用.NET 3.5和Visual Studio 2008)并手动编写查询等。

向前迈进,我想简化从开发团队那里获取数据的过程。而不是创建连接和查询和所有的每一次,我宁愿一个开发者可以简单地做这样的事:

var something = (from t in TableName select t); 

而且,理想情况下,他们只希望得到一些IQueryable的IEnumerable的或产生的实体。这将在我构建的新域核心内部完成,在这些核心中,这些实体将存活,并且应用程序将通过请求/响应服务层与它进行交互。

有几件事情需要注意的是:

  1. 对应于数据库表应该再生成的实体,我们更希望手动让他们随时间更新。也就是说,如果列/表被添加到数据库中,那么我们不应该做任何事情。 (如果删除了一些,当然会中断,但这很好。)但是如果我们需要使用新的列,我们应该能够将其添加到必要的类中,而无需重新生成整件事。
  2. 整个事情应该只有选择。我们在这里没有完整的DAL,因为我们不想破坏数据库中的任何东西(甚至意外)。
  3. 我们不需要任何类型的域对象和生成的实体类型之间的映射。该域几乎涵盖了那里的一小部分数据,其中大部分是我们永远不需要的,我们宁愿随着时间的推移手动创建可重用的地图。我已经有了一个逻辑上的分离DAL的地方,在这里我的“repository”类返回了域对象,我只是寻找一个更好的替代手工ADO的方法来在仓库类中使用。

有什么建议吗?看起来我正在做的仅仅是在DAL/ORM工具/教程的在线正常需求之外,我一直无法找到任何东西。或者,也许我只是忽略了明显的东西?

+0

IBM iSeries ...你的意思是一个DB2服务器吗? – code4life 2010-06-09 13:09:10

+0

看起来很多传统应用程序使用DB2驱动程序(IBM.Data.DB2.iSeries.dll)来建立ADO连接。我不是在这里的“iSeries团队”,所以我对这些细节有所庇护(主要是作为一个政策问题)。但我曾经听说它被称为“iSeries”和“AS400”。那么也许DB2在AS400上运行?我不是IBM数据库的人,所以我不知道正确的关键字:) – David 2010-06-09 13:31:39

+0

从你的角度来看,除了实际上必须输入所有那些单调乏味的'IDataReader' /'IDataRecord'解释代码之外,手动ADO有什么问题吗? ? – 2010-06-09 13:35:49

回答

1

你可能想研究这个:

http://www.codesmithtools.com/

我一直在其中使用此工具的几个项目,而开发商却非常喜欢那里。

警告:这不是免费软件。

+0

+1:这个很早的版本(2.6)是免费提供的,效果很好,但是依赖于.net 1.1。 – 2010-06-09 13:22:35

+0

我以前实际使用2.6,并没有特别激动。如果我可以为它写一个像样的模板,可能值得重新访问。 – David 2010-06-09 13:27:16

0

添加到code4life的答案。

我最近在家里的宠物项目上使用CodeSmith 2.6。
我量身定制了模板,以部分CRUD方法生成部分类。
然后,我扩展了部分类和部分方法以提供基本映射。当读“订单”,请阅读相关的“OrderLines”等

类似的做法可能会为你工作,并且简单,因为真的,你只需要CRUD中的R :)

希望这有助于。

P.S.我需要从CS 2.6切换到其他(可能是MyGeneration),因为2.6依赖于.Net 1.1,这是一个问题,因为我正在转向64开发机器。

UPDATE

我听到雅。
有一个很好的傀儡MyGeneration队友,我们在这里使用CodeSmith工作,这就是为什么我在家里去2.6(我快速浏览MyGeneration,没有立即得到它 - 这是比我更多的时间给它 - 如此切换回CS)。

MyGeneration基本上是CS的开源版本。

而且,为什么不让它总是生成的代码 - 你可以调整你的心内容与分部类&局部方法,我知道你想重新生成是矫枉过正,但经验告诉我,这是其中的一个事情,如果你不这样做,你会需要它,如果你有它,需要它,你永远不会注意到。

+0

它可能会出于我的需要,但我希望避免它。如果我只是一次生成代码并手动调整它,那么1.1依赖性就不会成为问题,但这是一个很大的“如果”。我在这里真的看着我的脚步,因为我执行的任何事情都很容易被刻在石头上,并在接下来的几年中变成“完成的方式”。 – David 2010-06-09 13:36:43