我真的不知道怎么说这个问题所以请耐心等待......
我有3个类:服务器,数据库和表。每个类都有一个“Name”属性。我希望它的工作原理是每个服务器可以有多个数据库,每个数据库可以有多个表。所以在Server类中我有这个属性。
Private _databases As List(Of Database)
Public Property Databases() As List(Of Database)
Get
Return _databases
End Get
Set(ByVal value As List(Of Database))
_databases = value
End Set
End Property
我在表的Database类中有类似的东西。这样可以正常工作,因为我可以做这样的事情来获取服务器中的所有数据库。
For Each db In s.Databases 's being the server object
Debug.Print(db.Name)
Next
我想扩展这些类。我希望服务器类处理所有连接信息,我希望其他类使用服务器类的连接信息。
例如,我设置了一个服务器类并将连接字符串设置为服务器。然后我希望数据库类使用serverclass.connectionstring属性连接到服务器并获取所有数据库的列表。但我想将该代码保存在数据库类中。我怎么能这样做?
我附上了一些我想做的代码。
Public Class Server
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _databases As List(Of Database)
Public Property Databases() As List(Of Database)
Get
Return _databases
End Get
Set(ByVal value As List(Of Database))
_databases = value
End Set
End Property
End Class
'-----New class
Public Class Database
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
Private _tables As List(Of Table)
Public Property Tables() As List(Of Table)
Get
Return _tables
End Get
Set(ByVal value As List(Of Table))
_tables = value
End Set
End Property
'This is where I need help!
Private Sub LoadTables ()
dim connectionstring as string = server.connectionstring 'Possible?
'Do database stuff
End Class
感谢阅读!
答案 0 :(得分:2)
您必须在子类中包含对“owner”类的引用。
不使用代码(为了简洁起见),您现在就拥有
Server
----------
Databases -----> Database
Name ------------
Tables -----> Table
Name --------------
Name
你想要的是这样的:
Server
----------
Databases -----> Database
Name ------------
^ Tables -----> Table
| Name --------------
--------------- Server Name
^ Database
|-------------------|
Server
类上的Database
属性和Database
类上的Table
属性旨在引用拥有它们的每个实例。
答案 1 :(得分:1)
在构建服务器时将服务器传递给数据库,并设置一个字段。这是dependency injection的一种非常基本的形式。
答案 2 :(得分:1)
我个人会让数据库知道存储它的服务器,这样数据库就会根据给定的服务器知道连接的位置。
这样做会像:
public class Database {
public Database(Server server) {
Server = server;
}
public Server Server { get; private set; }
}