我一般不熟悉泛型(概念或语法)(在集合中不使用它们而不是在集合中),但我想知道以下是否是实现我想要的最佳方式。实际上,在这种情况下,我并不完全是积极的仿制药会解决我的问题。
我已经在NHibernate中建模并映射了几十个对象,并且需要某种通用类来进行我的CRUD操作,而不是为每种类型创建一个单独的persister类...例如
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可以是不同的类型。我知道这不是最好的方式(或者它甚至可以工作),但我希望有人能引导我朝着正确的方向前进。
答案 0 :(得分: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()。