流畅的NHibernate - 使用自定义映射映射枚举列表

时间:2015-04-09 10:43:57

标签: c# collections enums fluent-nhibernate iusertype

在我们的解决方案中,映射枚举时,不是简单地保存整数或文本描述,而是使用自定义IUserType来解析数据库表的文本描述并检索相应的ID。 (这些值在应用程序启动时缓存,以加快速度)

这对单个Enum属性非常有效。映射代码(使用映射覆盖)看起来像这样....

POCO:

  public class Connection
  {
      // Other properties omitted
      public Protocol Protocol { get; set; }
  }

映射覆盖:

  mapping.Map(map => map.Protocol, "ProtocolID")
         .CustomType<GenericEnumUserType<Protocol>>();

当我有要映射的枚举列表时,会出现问题。例如......

POCO:

  public class Credential
  {
      // Other properties omitted
      public ICollection<Protocol> Protocols { get; set; }
  }

我的研究(herehere)表明映射应类似于以下内容:

  mapping.HasMany(x => x.Protocols)
         .Table("TABLE")
         .KeyColumn("COLUMN")
         .Component(component =>
                   {
                           //MAP YOUR CUSTOM TYPE HERE
                   })
         .Cascade.None()
         .KeyNullable()
         .Not.LazyLoad();

...但我无法弄清楚如何在CustomType部分中连接MAP YOUR CUSTOM TYPE HERE

另一方面,this SO thread表示CustomType无法用于收藏 - 但是该特定评论的日期是2009年,所以我希望自那时以来发生了一些变化。

这种类型的映射是否可行(如果是这样,我错过了什么)或者我是否需要开始寻找最合适的解决方案?

干杯。

0 个答案:

没有答案