目前我正在尝试在vb.net中创建一种可用于创建/获取数据库托管的模型.
我创建了一个主类Model,它带有一个共享函数来获取数据集,例如Model.find().现在我想创建继承主要Model-Class的类,例如用户的单独类:UserModel.find()=>"SELECT*FROM users".
我现在需要的是找到一种方法来告诉Class它应该使用哪个表.我想到了一个抽象的字符串"表",它是每个"子模型"中的常量,但是如何实现它,因为它不可能覆盖共享成员?
提前致谢!
编辑:也许这会让我的意思更清楚一点:
Public Class Model
Public Shared _controller As Controller
Public Shared table As String
Protected Shared tableFields As String()
Shared reader As Npgsql.NpgsqlDataReader
Public Shared Function find()
Dim a As ArrayList = New ArrayList
'Test if the tablefields are already known to the class, if not, get them
If tableFields Is Nothing Then
getTableFields()
End If
Dim query As String = "SELECT " + String.Join(", ", tableFields) + " FROM " + table
reader = _controller.executeReader(query)
While reader.Read
o = New Model
Dim v As New Hashtable
For Each field In tableFields
v(field) = reader(field)
Next
o.values = v
a.Add(o)
End While
reader.Close()
Return DirectCast(a.ToArray(GetType(Model)), Model())
End Function
Public values As Hashtable
Public Sub New()
End Sub
End Class
Run Code Online (Sandbox Code Playgroud)
所以我想要一个共享方法,它找到所有数据库条目并返回一个自己类型的实例数组,例如Model().这就是为什么我想保持find-method共享而不是绑定到实例.
我认为你可以使用Generics. 这里我\xc2\xb4ve粘贴了一个例子
您域中的所有类都可以继承自实体类
\n\nPublic MustInherit Class Entity\n\n '...\n\nEnd Class\nRun Code Online (Sandbox Code Playgroud)\n\n您的Model 类,以及您的方法 Find
\n\nPublic Class Model\n\n Public Shared Sub Find(Of T As Entity)()\n\n ' You could know the name of T to find the table\n\n Dim tableName As String = GetType(T).Name\n\n '... \n\n End Sub\n\nEnd Class\nRun Code Online (Sandbox Code Playgroud)\n\n您的域的一类,例如:用户类
\n\nPublic Class User\n Inherits Entity\n\n ' ...\n\nEnd Class\nRun Code Online (Sandbox Code Playgroud)\n\n最后,通过一个示例说明如何实例化 Find 方法
\n\nModel.Find(Of User)()\n\n'...\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道这是否是你的意思,你觉得这有帮助吗?
\n| 归档时间: |
|
| 查看次数: |
6785 次 |
| 最近记录: |