【问题标题】:FluentNHibernate mapping for Dictionary字典的 FluentNHibernate 映射
【发布时间】:2010-11-27 11:57:39
【问题描述】:

使用 Fluent NHibernate 映射简单 Dictionary 属性的最佳方法是什么?

【问题讨论】:

    标签: nhibernate fluent


    【解决方案1】:

    将列表映射为字典:

    HasMany(x => x.Customers)
      .AsMap();
    

    我没用过;所以不能举个例子。

    看看 wiki:Cached version of the page,Actual page 我已经给出了页面的缓存版本,因为该站点似乎已关闭。

    【讨论】:

    • 这并不能真正帮助用户。他肯定能查到正确的方法,但是方法的用法并不明显。
    【解决方案2】:

    使用简单的类关系,如下所示:

    public class Foo {
        public virtual IDictionary<string, Bar> Bars { get; set; }
    }
    
    public class Bar {
        public virtual string Type { get; set; }
        public virtual int Value { get; set; }
    }
    

    您可以通过这种方式将其与 Fluent NHibernate 映射:

    mapping.HasMany(x => x.Bars)
           .AsMap(x => x.Type);
    

    其中Bar.Type 用作字典中的关键字段。

    【讨论】:

      【解决方案3】:
      public class PersistedData 
      {
          public virtual IDictionary<key, value> Dictionary { get; set; }
      }
      
      public class PersistedDataMap : ClassMap<PersistedData>
      {
          HasMany(x => x.Dictionary)
                  .Table("dict_table")
                  .KeyColumn("column_id")
                  .AsMap<string>("key")
                  .Element("value");
      }
      

      这将正确地将Dictionary 映射到表dict_table 并使用column_id 将其关联到基本ID。

      附带说明,如果您想使用 Enum 作为字典中的 Key,应注意 NHibernate.Type.EnumStringType&lt;MyEnum&gt; 可以用来代替 .AsMap&lt;string&gt; 中的字符串,以使用字符串值而不是序数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-25
        • 1970-01-01
        • 2012-03-14
        • 2021-11-22
        • 2015-09-09
        • 2012-01-21
        • 2014-10-03
        • 2012-06-09
        相关资源
        最近更新 更多