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 (文字列) が現在のオブジェクトの単なる型名である場合は、最初に someObject.GetType() を使用する方がよいでしょう。

于 2008-10-16T00:57:29.770 に答える