EntLib(二)创建数据库实例的工厂方法

在第一篇文章的基础上,笔者又写了一个创建数据库实例的工厂类。此类采用注册(Register)/创建(Create)的方式。注册方法用来向工厂类注册数据库连接,创建方法用来创建数据库连接的实例(对象)。

注册方法包括如下三种:
1.根据EntLib配置文件中的默认数据库配置节注册
2.根据ConnectionStrings配置节中的数据库连接注册
3.直接指定数据库连接字符串和数据提供者名称注册

创建方法包括两种:
1.直接创建默认数据库连接实例
2.根据注册名创建数据库实例

创建数据库连接实例工厂类代码如下:

Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Configuration
Imports System.Data.Common

Public NotInheritable Class DbFactory

Private Const CDefault As String = "Default"

Private Shared _db As New Dictionary(Of String, Database)

Public Shared Sub Register()
If Not _db.ContainsKey(CDefault) Then
Dim db As Database = DatabaseFactory.CreateDatabase()
_db.Add(CDefault, db)
End If
End Sub

Public Shared Sub Register(name As String)
If Not _db.ContainsKey(CDefault) Then
Dim c = From item As ConnectionStringSettings In ConfigurationManager.ConnectionStrings
Where item.Name.Equals(name)
Select item
If c.Count > 0 Then
Dim db As Database = DatabaseFactory.CreateDatabase(name)
_db.Add(name, db)
End If
End If
End Sub

Public Shared Sub Register(name As String, _
connectionString As String, _
providerName As String)
If Not _db.ContainsKey(name) Then
Dim db As Database = New GenericDatabase(connectionString, DbProviderFactories.GetFactory(providerName))
_db.Add(name, db)
End If
End Sub

Public Shared Function Create() As Database
Return Create(CDefault)
End Function

Public Shared Function Create(name As String) As Database
If Not _db.ContainsKey(name) Then
Throw New ArgumentException()
End If
Return _db.Item(name)
End Function

End Class

使用示例:

Imports Microsoft.Practices.EnterpriseLibrary.Data
Imports System.Transactions
Imports System.Data.Common
Imports System.Configuration

Module Module1

Sub Main()
DbFactory.Register("LocalSqlServer")
Dim db As Database = DbFactory.Create("LocalSqlServer")

Using t As New TransactionScope
Dim cmd As DbCommand = db.GetSqlStringCommand("SELECT * FROM SYS_User")
Dim ds As DataSet = db.ExecuteDataSet(cmd)
Console.WriteLine(ds.GetXml())
End Using
Console.ReadLine()
End Sub

End Module

我们可以通过这种注册/创建的方式创建连接多个及多种数据库连接的实例,方便系统中进行多维度的数据访问。

posted on 2012-02-20 20:46  Richard.Tsui  阅读(278)  评论(0编辑  收藏  举报