我有一个枚举类型:
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}}列
我的问题是什么:字符串的格式不正确。
我尝试使用[tm].[PartnerCommunicationTypes
将CommunicationType
映射为单个属性,这很有效,但我无法通过收集来做到这一点。
有没有办法可以映射枚举的集合并从nvarchar映射它?
修改:这个答案可以帮助我Map(x=>x.CommunicationType)
,但我无法理解如何使用FluentNHibernate设置类型。
答案 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>>());