1

我一般不太熟悉泛型(概念或语法)(缺少在集合中使用它们等等),但我想知道以下是否是完成我想要的最佳方式。实际上,我并不完全肯定泛型会在这种情况下解决我的问题。

我已经在 NHibernate 中建模和映射了几十个对象,并且需要某种通用类来进行我的 CRUD 操作,而不是为每种类型创建一个单独的持久类。例如

Sub Update(someObject as Object, objectType as String)
     Dim session As ISession = NHibernateHelper.OpenSession
     Dim transaction As ITransaction = session.BeginTransaction
     session.Update(ctype(someObject, objectType))
     transaction.Commit()
End Sub

其中 someObject 可以是不同的类型。我知道这不是最好的方法(或者它甚至会起作用),但我希望有人能引导我朝着正确的方向前进。

4

1 回答 1

2

这里的关键问题是: session.Update 将什么作为参数?如果 session.Update 允许一个通用对象,那么我就使用它:

 Sub Update(Of T)(ByVal someObject As T)
     Dim session As ISession = NHibernateHelper.OpenSession
     Dim transaction As ITransaction = session.BeginTransaction
     session.Update(someObject)
     transaction.Commit()
 End Sub

这会将泛型类型 T 流向 session.Update。

如果 session.Update 只接受一个对象,那么只需传入该对象;无需 CType 它。此外,如果 objectType (string) 只是当前对象的类型名称,则最好首先使用 someObject.GetType()。

于 2008-10-16T00:57:29.770 回答