Определено (где DbSet1,2,3 идентичные определения):Могу ли я определить метод .net для принятия параметров с определениями переменных?
Context1
DbSet1
DbSet2
DbSet3
Context2
DbSet1
DbSet2
DbSet3
Context3
DbSet1
DbSet2
DbSet3
Context4 (where DbSet4,5,6 are supersets of DbSet1,2,3)
DbSet4
DbSet5
DbSet6
Желательно, чтобы выполнять стандартные операции и между контекстами. Это могут быть такие вещи, как Clear, Backup, Load, Seed, Copy и т. Д. Копия используется ниже в качестве примера, где различные наборы данных копируются между контекстами. Четвертый метод ниже немного отличается, потому что Context4 немного отличается от Contexts1,2,3.
Sub Method1 (db1 as Context1, db2 as Context2)
Copy_db1_to_db2()
End
Sub Method2 (db1 as Context1, db3 as Context3)
Copy_db1_to_db3()
End
Sub Method3 (db2 as Context2, db3 as Context3)
Copy_db2_to_db3()
End
Method4 (db1 as Context1, db4 as Context4)
Copy_db1_to_db4()
End
Можно ли, и если да, то как мы определяем метод так, что различные методы 1,2,3 объединены в единый methodX, который может принимать различные контексты? Мой опыт ограничивается пониманием того, что параметры метода специально объявлены так, что с помощью указанных выше способов, следующий не будет работать:
Method3(Context1,Context3)
Это не потому, что method3 ожидает, что первый параметр с типом Context2.
Но внутри каждого из методов 1,2,3 код будет идентичным; единственная разница с этими методами - это объявления контекста в определении параметров. Я предполагаю, что существует элегантный способ определить один методX, который позволил бы передавать разные контексты до тех пор, пока ссылки внутри этого метода X согласуются с различными объявлениями контекста.
Метод4 - это немного другая проблема, поскольку Context4 имеет дополнительные таблицы/поля. Но, кроме дополнительных таблиц/полей, оставшаяся часть операций будет обращаться к DbSets 1,2,3. Предполагая, что есть способ сделать то, о чем я прошу, будет также вместить немного другой Context4, если код MethodX остается совместимым со всеми передаваемыми Контекстами?
Добавлено размещать после дальнейших исследований:
Перед выполнением ответа в первом посте ниже я попытался следующим:
Sub Method1 (db1 as Object, db2 as Object)
Code that performs the operations
End
К не печатая параметры method1 с определенными типами контекстов, он принимает и работает правильно с Контекстами 1-3. Я предполагаю, что если я попытаюсь ссылаться на различия в Context 4, все будет взорваться. Но если у меня есть только код, который работает в Contexts 1-3, это похоже на отличное решение для повторного использования кода в этих различных контекстах с идентичными базами данных, но с разными строками подключения. Я что-то упускаю?
Так что мой следующий вопрос: Является ли эта плохая практика или это законное использование типа «Объект»?
использовать интерфейсы и/или дженерики. – SLaks
Я не совсем понял, что вы имели в виду под дженериками, но, пожалуйста, см. Мое дополнение выше. – Alan