【发布时间】:2012-11-02 21:08:24
【问题描述】:
我需要构建一个数据访问库,以便以后在许多小型应用程序中使用。
它将大量使用 DataReader 对象。 SQL Server 或 DB2/400 中的表可能具有相同的结构。这意味着例如一个方法
GetItemsByWarehouse()
必须能够针对 SQL Server DB 或 DB2 运行。它将在哪里运行取决于服务器可用性和用户选择。
我打算做什么(并且需要建议)是:
- 实施基于单例设计模式的 DAL,以确保我的库只有一个实例。
- 有一个可以设置连接字符串的属性。
- 如果目标服务器是 AS400 或 SQL,则具有将设置的属性。
我不知道这种做法是否正确。我应该实现第 3 点还是可以从连接字符串中获取类型?
另外我应该如何实现上述方法?检查属性并在方法内部决定我是使用Sqlconnection 还是OleDbConnection e.t.c?
【问题讨论】:
-
更好的是,我建议您选择一个您喜欢的微型 Orm,然后添加 DB2 支持。它的代码更少,你会开发得更快,因为你已经有一个如何做到这一点的例子
-
我只是想锻炼自己手动使用设计模式和原则。毕竟应用程序的大小并不能证明 orm 的合理性。在我深入研究 ORM(很可能是 EF)之前,我想有一个相当好的理解。
-
微型 ORM(基本上是 Ado.Net 之上的一组助手)和像 NHibernate 或 Ef 这样的 ORM 之间存在差异,它们非常复杂,具有许多旨在完全抽象 RDBMS 的特性使用权。 AFAIK EF 不支持 DB2,如果您只是想要一种简单的方法来访问 db,但仍然需要将 SQL 语句直接发送到 db,请使用 micro。 IMO 在极少数情况下使用真正的 ORM 是有意义的。
标签: c# database design-patterns data-access-layer