我一直在寻找一个简单的解决方案,尽我所能倾向于NHibernate的东西,但到目前为止,我发现的一切似乎试图解决一个稍微不同的问题。以下是我在当前项目中看到的内容:生成简单的只读DAL?
我们有一个IBM iSeries数据库作为用于我们的核心业务(金融机构)的第三方软件套件的主要存储库。我的团队所做的一部分工作就是编写能够以某种方式报告或输入大量数据的应用程序。在过去,我们一直在手动创建ADO .NET连接(顺便说一句,我们使用.NET 3.5和Visual Studio 2008)并手动编写查询等。
向前迈进,我想简化从开发团队那里获取数据的过程。而不是创建连接和查询和所有的每一次,我宁愿一个开发者可以简单地做这样的事:
var something = (from t in TableName select t);
而且,理想情况下,他们只希望得到一些IQueryable的IEnumerable的或产生的实体。这将在我构建的新域核心内部完成,在这些核心中,这些实体将存活,并且应用程序将通过请求/响应服务层与它进行交互。
有几件事情需要注意的是:
- 对应于数据库表应该再生成的实体,我们更希望手动让他们随时间更新。也就是说,如果列/表被添加到数据库中,那么我们不应该做任何事情。 (如果删除了一些,当然会中断,但这很好。)但是如果我们需要使用新的列,我们应该能够将其添加到必要的类中,而无需重新生成整件事。
- 整个事情应该只有选择。我们在这里没有完整的DAL,因为我们不想破坏数据库中的任何东西(甚至意外)。
- 我们不需要任何类型的域对象和生成的实体类型之间的映射。该域几乎涵盖了那里的一小部分数据,其中大部分是我们永远不需要的,我们宁愿随着时间的推移手动创建可重用的地图。我已经有了一个逻辑上的分离DAL的地方,在这里我的“repository”类返回了域对象,我只是寻找一个更好的替代手工ADO的方法来在仓库类中使用。
有什么建议吗?看起来我正在做的仅仅是在DAL/ORM工具/教程的在线正常需求之外,我一直无法找到任何东西。或者,也许我只是忽略了明显的东西?
IBM iSeries ...你的意思是一个DB2服务器吗? – code4life 2010-06-09 13:09:10
看起来很多传统应用程序使用DB2驱动程序(IBM.Data.DB2.iSeries.dll)来建立ADO连接。我不是在这里的“iSeries团队”,所以我对这些细节有所庇护(主要是作为一个政策问题)。但我曾经听说它被称为“iSeries”和“AS400”。那么也许DB2在AS400上运行?我不是IBM数据库的人,所以我不知道正确的关键字:) – David 2010-06-09 13:31:39
从你的角度来看,除了实际上必须输入所有那些单调乏味的'IDataReader' /'IDataRecord'解释代码之外,手动ADO有什么问题吗? ? – 2010-06-09 13:35:49