2016-09-16 15 views
0

はnvarcharなどの文字列とストアを使用して列挙型のマップ集:NHibernateは:私は、列挙型を持っている

public enum CommunicationType 
{ 
    [Description("Callback to client")] 
    Callback 
} 

どのクラスPartnerIList<CommunicationType>のプロパティとして1つの使用:

​​

マイPartnerMapクラス次のようになります。

public class PartnerMap : ClassMap<Partner> 
{ 
    public PartnerMap() 
    { 
     Schema("tm"); 
     Table("Partner"); 

     Id(x => x.Id); 

     HasMany(x => x.CommunicationTypes) 
      .Schema("tm") 
      .Table("PartnerCommunicationType") 
      .KeyColumn("PartnerId") 
      .Element("CommunicationType"); 
    } 
} 

1対多関係PartnerCommunicationTypeの間、私はテーブルに格納[tm].[PartnerCommunicationType]

私の最終的な目標何
PartnerId bigint 
CommunicationType nvarchar(256) 

:nvarchar型の値として列挙型を格納し、テーブル[tm].[PartnerCommunicationTypesの列CommunicationTypeからIList<CommunicationType>にテーブルから、それをマップします。

私の問題点:文字列の形式が正しくありません。

enter image description here

私はMap(x=>x.CommunicationType)を使用して、単一のプロパティとしてCommunicationTypeをマップしようとしましたが、これは素晴らしい作品が、私は、コレクションでそれを行うことはできません。

enumのコレクションをマップしてnvarcharからマップできる方法はありますか?

この回答は役に立ちましたか?http://stackoverflow.com/a/22732415/2524304私はFluentNHibernateを使用してどのようにタイプを設定できるのか理解できません。

答えて

0

これが答えです:Fluent NHibernate - How map an IList<Enum> as list of strings

あなたはジェネリックとしてあなたのタイプでNHibernate.Type.EnumStringType<T>を使用する必要があります。

HasMany(x => x.CommunicationTypes) 
    .Schema("tm") 
    .Table("PartnerCommunicationType") 
    .KeyColumn("PartnerId") 
    .Element("CommunicationType", part => part.Type<EnumStringType<CommunicationType>>()); 
関連する問題