【问题标题】:Generate A Simple Read-Only DAL?生成一个简单的只读 DAL?
【发布时间】: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 生成的实体。这将在我正在构建的新域核心内完成,这些实体将驻留,应用程序将通过请求/响应服务层与其交互。

需要注意的几点是:

  1. 对应于数据库表的实体应该生成一次,我们更愿意手动保持它们随着时间的推移而更新。也就是说,如果将列/表添加到数据库中,那么我们不需要做任何事情。 (如果有些被删除了,当然会坏掉,但没关系。)但是如果我们需要使用一个新列,我们应该能够将它添加到必要的类中,而不必重新生成整件事。
  2. 整个事情应该是SELECT-only。我们没有在此处执行完整的 DAL,因为我们不希望能够破坏数据库中的任何内容(即使是意外)。
  3. 我们不需要在我们的域对象和生成的实体类型之间进行任何类型的映射。该域几乎不涵盖其中的一小部分数据,其中大部分我们永远不需要,我们宁愿随着时间的推移手动创建可重复使用的地图。我已经对 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


【解决方案1】:

您可能想对此进行调查:

http://www.codesmithtools.com/

我参与过一些使用此工具的项目,开发人员很喜欢它。

警告:它不是免费软件。

【讨论】:

  • +1:这个 (2.6) 的早期版本是免费提供的,运行良好,但依赖于 .net 1.1。
  • 我过去实际上使用过 2.6,但对它并不特别感兴趣。如果我可以为它写一个像样的模板,可能值得重新访问。
【解决方案2】:

添加到 code4life 的答案。

我最近在家里的一个宠物项目中使用了 CodeSmith 2.6。
我定制了模板以使用部分 CRUD 方法生成部分类。
然后我扩展了部分类和部分方法以提供基本映射,例如读取“Order”时,读取关联的“OrderLines”等。

类似的方法可能对您有用,而且更简单,因为实际上,您只需要 CRUD 的 R :)

希望这会有所帮助。

附:我需要从 CS 2.6 切换到其他版本(可能是 MyGeneration),因为 2.6 依赖于 .Net 1.1,当我转向 64 位开发机器时,这是一个问题。

更新

我听到了。
好好戳一下 MyGeneration 伙伴,我们在工作中使用 CodeSmith,这就是我在家里选择 2.6 的原因(我快速浏览了 MyGeneration,没有立即得到它 - 这比我必须付出的时间更多它-所以切换回CS)。

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

另外,为什么不总是让它生成代码 - 你可以使用部分类和部分方法调整你的内心满足感,我知道你认为 重新生成 是矫枉过正,但经验告诉我它是其中之一,如果你没有它,你就会需要它,就像你拥有它并且需要它一样,你永远不会注意到。

【讨论】:

  • 它可能会满足我的需要,但我希望避免它。如果我只生成一次代码并手动调整它,那么 1.1 的依赖不应该成为问题,但此时这是一个很大的“如果”。我真的在关注我的步伐,因为无论我实施什么,都可以很容易地刻在石头上,并在接下来的几年里成为“它的完成方式”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 2013-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多