定义(DbSet1,2,3是相同的定义):
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
期望在上下文之间和之间执行标准操作。这可能是清除,备份,加载,种子,复制等。下面将使用复制作为在上下文之间复制各种数据集的示例。下面的第四种方法略有不同,因为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合并到一个可以接受不同上下文的方法X中?我的经验仅限于理解方法的参数是专门声明的,因此使用上述方法时,以下方法不起作用:
Method3(Context1,Context3)
这会失败,因为Method3期望第一个参数是Context2类型。
但是在方法1,2,3的每个方法中,代码都是相同的;与这些方法的唯一区别是参数定义中的Context声明。我假设有一种优雅的方法来定义一个方法X,只要该方法X中的引用与各种上下文声明一致,就可以传入不同的上下文。
Method4是一个稍微不同的问题,因为Context4定义了额外的表/字段。但是除了附加的表/字段之外,其余的操作将对DbSets 1,2,3进行相同的处理。假设有一种方法可以做我正在问的问题,那么只要MethodX中的代码与传入的所有上下文保持一致,它是否也会容纳稍微不同的Context4?
在进一步调查后添加到帖子中
在下面第一篇文章中的答案之前,我尝试了以下内容:
Sub Method1 (db1 as Object, db2 as Object)
Code that performs the operations
End
通过不使用特定上下文类型键入Method1&#39的参数,它接受并适用于上下文1-3。我假设如果我尝试引用Context 4中的差异,事情会爆发。但是,如果我只使用适用于上下文1-3的代码,那么在具有相同数据库但不同连接字符串的这些不同上下文中重用代码似乎是一个很好的解决方案。我错过了什么吗?
所以我的跟进问题:这是一种不好的做法,还是合法使用类型'对象'?
答案 0 :(得分:0)
有几种方法可以做到这一点,但一种选择是重载它们:
Sub Method (db1 as Context1, db2 as Context2)
Copy_db1_to_db2()
End
Sub Method (db1 as Context1, db3 as Context3)
Copy_db1_to_db3()
End
Sub Method (db2 as Context2, db3 as Context3)
Copy_db2_to_db3()
End
Sub Method (db1 as Context1, db4 as Context4)
Copy_db1_to_db4()
End
如果你想拥有通用代码,请将所有上下文的公共位拉出到一个界面中(让我们说IContext
),并拥有一个公共重载调用的私有方法;
Private Sub Copy (db1 as IContext, db2 as IContext)
...
End
然后
Sub Method (db1 as Context1, db2 as Context2)
Copy(db1, db2)
End
Sub Method (db1 as Context1, db3 as Context3)
Copy(db1, db3)
End
Sub Method (db2 as Context2, db3 as Context3)
Copy(db2, db3)
End
Sub Method (db1 as Context1, db4 as Context4)
Copy(db1, db4)
' Custom bits for v4 here
End