【发布时间】:2011-03-01 15:51:52
【问题描述】:
我一直在寻找一个简单的解决方案,尽我最大的努力倾向于像 NHibernate 这样的东西,但到目前为止,我发现的一切似乎都在试图解决一个稍微不同的问题。这是我在当前项目中看到的内容:
我们有一个 IBM iSeries 数据库作为我们核心业务(金融机构)使用的第三方软件套件的主要存储库。我的团队所做的部分工作是编写应用程序,以某种方式报告或关闭大量此类数据。过去,我们一直在手动创建 ADO .NET 连接(顺便说一下,我们使用的是 .NET 3.5 和 Visual Studio 2008)并手动编写查询等。
展望未来,我想为开发团队简化从那里获取数据的流程。与其每次都创建连接和查询,我更希望开发人员能够简单地执行以下操作:
var something = (from t in TableName select t);
而且,理想情况下,他们只会获得一些 IQueryable 或 IEnumerable 生成的实体。这将在我正在构建的新域核心内完成,这些实体将驻留,应用程序将通过请求/响应服务层与其交互。
需要注意的几点是:
- 对应于数据库表的实体应该生成一次,我们更愿意手动保持它们随着时间的推移而更新。也就是说,如果将列/表添加到数据库中,那么我们不需要做任何事情。 (如果有些被删除了,当然会坏掉,但没关系。)但是如果我们需要使用一个新列,我们应该能够将它添加到必要的类中,而不必重新生成整件事。
- 整个事情应该是SELECT-only。我们没有在此处执行完整的 DAL,因为我们不希望能够破坏数据库中的任何内容(即使是意外)。
- 我们不需要在我们的域对象和生成的实体类型之间进行任何类型的映射。该域几乎不涵盖其中的一小部分数据,其中大部分我们永远不需要,我们宁愿随着时间的推移手动创建可重复使用的地图。我已经对 DAL 进行了逻辑分离,其中我的“存储库”类返回域对象,我只是在寻找在存储库类中使用的手动 ADO 的更好替代方案。
有什么建议吗?似乎我所做的只是超出了对在线 DAL/ORM 工具/教程的正常需求,以至于我无法找到任何东西。或者我只是忽略了一些明显的东西?
【问题讨论】:
-
IBM iSeries...您的意思是 DB2 服务器吗?
-
看起来这里的许多遗留应用程序都使用 DB2 驱动程序 (IBM.Data.DB2.iSeries.dll) 来建立 ADO 连接。我不是这里的“iSeries 团队”,所以我有点躲避细节(主要是作为政策问题)。但过去我听说它被称为“iSeries”和“AS400”。那么也许 DB2 在 AS400 上运行?我不是 IBM 数据库专家,所以我不知道正确的关键字 :)
-
从您的角度来看,手动 ADO 除了必须输入所有繁琐的
IDataReader/IDataRecord解释代码之外还有什么问题吗? -
那和手动编写的查询作为字符串。这里的目标是让开发人员编写和维护更快、更容易,更不容易出现拼写错误(强类型实体类 vs. 文字字符串 = 编译时错误 vs. 运行时错误,后者最好避免) ,也许还有一点酷的因素,所以它会很有趣(让我们面对现实吧,ADO 很无聊):)
标签: c# .net orm data-access-layer