Я новичок в .Net Programming и хотел бы знать, подходит ли Reflection для обхода объекта для обнаружения коллекций в экземпляре класса.
Я работаю с Microsoft.SqlServer.Management.Smo Namespace.
Планируется подключиться к базе данных, определить, какие коллекции существуют, а затем для каждой из этих коллекций, если Коллекция предоставляет объекты, которые реализуют интерфейс IScriptable, сгенерировать сценарий для объекта.
Как мне сделать следующее (Это псевдокод, поскольку я ищу помощи в использовании рефлексии или другого метода для выполнения следующих действий)
Imports Microsoft.SqlServer.Management.Smo
Imports Microsoft.SqlServer.Management.Smo.Agent
Imports Microsoft.SqlServer.Management.Common
Dim db as Database
...
' 1. How do I determine all Collections in the db Object I have created, which implement the IScriptable Interface.
For each myCollection as Collection in db.Database.?Collections?
For each collection_object in myCollection
If collection_object.GetInterface("IScriptable") IsNot Nothing Then
ScriptObjectCreate(collection_object, destFolder & "\" & TypeOf(collection_object).toString() & "\", False)
End If
Next
Next
Пока я могу подключиться кТаблицы базы данных и сценария выполняются следующим образом.
For Each obj As Table In db.Tables
If Not (obj.IsSystemObject) Then
ScriptObjectCreate(obj, destFolder & "\" & "Tables\", False)
End If
Next
Причина, по которой я хочу изменить это, состоит в том, что разные версии SQL Server будут содержать разные коллекции объектов.Вместо написания кода для каждого типа.
For each obj as Table
For each obj as StoredProcedure
For each obj as Trigger
etc...
Я бы хотел перечислить все объекты в БД с одной функцией, если это возможно