NHibernate:使用string和store作为nvarchar映射枚举的集合

时间:2016-09-16 09:26:38

标签: c# nhibernate enums fluent-nhibernate

我有一个枚举类型:

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

哪一个用作IList<CommunicationType>课程中Partner的属性:

public class Partner
{       
    public virtual long Id { get; set; }
    public virtual IList<CommunicationType> CommunicationTypes { get; set; }
}

我的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");
    }
}

Partner中存储的CommunicationType[tm].[PartnerCommunicationType]之间的一对多关系:

PartnerId bigint
CommunicationType nvarchar(256)

我的最终目标:将枚举存储为nvarchar值,并将其从表IList<CommunicationType>映射到表CommunicationType的{​​{1}}列

我的问题是什么:字符串的格式不正确。

enter image description here

我尝试使用[tm].[PartnerCommunicationTypesCommunicationType映射为单个属性,这很有效,但我无法通过收集来做到这一点。

有没有办法可以映射枚举的集合并从nvarchar映射它?

修改:这个答案可以帮助我Map(x=>x.CommunicationType),但我无法理解如何使用FluentNHibernate设置类型。

1 个答案:

答案 0 :(得分: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>>());