2011-10-23 7 views
0

DiscriminatorValueのデフォルト値はSubclassの完全修飾名です。Fluent NHibernateを使用してディスクリミネータ値を指定する

数値に、たとえばenum値や1文字をマップしたいとします。私はDiscriminatorValueを使用してマッピング内で指定しようとしましたが、影響はなく、サブクラス名に固執しています。

例:

public class MovieMapping : SubclassMap<Movie> 
{ 
    public MovieMapping() 
    { 
     Map(m => m.Director); 
     HasMany(m => m.Actors) 
      .KeyColumn("MovieId") 
      .AsList(l => l.Column("ActorIndex")); 
     DiscriminatorValue("'M'"); 
    } 
} 

私はDiscriminatorの欄にMを見ると期待しているだろうが、それは代わりに、完全修飾サブクラス名を思い付きます。

Fluent NHibernateでこれを行うことができる人はいますか?

答えて

2

親クラスでDiscriminateSubClassesOnColumnを使用していました。しかし、非汎用バージョンは、サブクラスが整数値を必要としていることを示しているにもかかわらず、文字列にデフォルト設定されているため、型名文字列が格納されていました。

DiscriminateSubClassesOnColumnの一般的なバージョンが見つかりました。それを使用すると、正常に動作し、ディスクリミネータ列の整数値が取得されます。

DiscriminateSubClassesOnColumn( "ProductType"、(int)0);

親クラスが文字列マッピングを持っているという事実と、int値を送信しようとしている子クラスの間で、マッピングエンジンがエラーをスローしたが、不一致がちょうど無視されていたのではないでしょうか。

関連する問題