NHibernate:使用字符串映射枚举集合并存储为 nvarchar

NHibernate: map collection of enums using string and store as nvarchar

我有一个枚举类型:

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

在class Partner:

中用作IList<CommunicationType>的属性
public class Partner
{       
    public virtual long Id { get; set; }
    public virtual IList<CommunicationType> CommunicationTypes { get; set; }
}

我的 PartnerMap class 看起来像这样:

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

PartnerCommunicationType 之间的一对多关系我存储在 table [tm].[PartnerCommunicationType]:

PartnerId bigint
CommunicationType nvarchar(256)

我的最终目标是什么:将枚举存储为 nvarchar 值并将其从 table 映射到 CommunicationType 列的 IList<CommunicationType> table [tm].[PartnerCommunicationTypes.

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

我尝试使用 Map(x=>x.CommunicationType)CommunicationType 映射为单个 属性,这很好用,但我不能用集合来做到这一点。

有没有一种方法可以映射枚举集合并从 nvarchar 映射它?

编辑: 这个答案应该对我有帮助 但我不明白如何使用 FluentNHibernate 设置类型。

这是答案: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>>());