2011-09-16 9 views
4

System.Type型のプロパティを持つエンティティをマップすると、NHibernateがこれをAssembly Qualified Nameを保持するDbType.Stringにマップすることがわかります。この型では、列は "TarkusSoftware.Abstract.ITask、TarkusSoftware.Abstract、Version = 1.0.0.0、Culture = neutral、PublicKeyToken = null"のような値を保持します。NHibernateマッピングSystem.Type

長期的な開発にはどういう意味がありますか?最終的にアセンブリバージョンを2.0.0.0に変更するとどうなりますか? NHibernateは、アセンブリの修飾名を持つ型を見つけることができないため、オブジェクトを水和することができません。この場合、今後の互換性を確保するためにSystem.Typeのマッピングをどのように進めるべきですか?ありがとう:)

答えて

3

これはおそらく正しいでしょう。独自のIUserTypeを実装して、より制御しやすくすることができます。

NHのソースをチェックしたところ、あなたは正しいです。 TypeNameParser.Parse()

+0

私は、IUserTypeではなく、IUserTypeを保持するクラスの追加の保護されたプロパティをマッピングすると思います。 "TarkusSoftware.Abstract.ITask、TarkusSoftware.Abstract"のような文字列を使用し、ビジネスロジックを使用して型プロパティ自体を実現することで十分です。しかし、本当に必要かどうか疑問に思っています... NHはこの状況をどのように処理するかを知っています。つまり、完全修飾名から型を解析しなければならない場合は、特定のバージョンを作成しようとしますが、失敗した場合は、使用可能なバージョンを作成しようとします。私はNHがそれを行うのに十分なスマートだと思いますが、間違っていますか?誰かが確かに知っていますか? –

+0

ありがとう!これはそれを解決する:) –