如何映射string和IList在流利的休眠状态

本文关键字:string 休眠状态 何映射 映射 IList | 更新日期: 2023-09-27 18:07:20

我有一个类,它包含一个字典结构的值集合,其中键为字符串,每个元素为字符串列表。

如何将其映射为单独的表而无需定义额外的类?

我试过下面的代码,但不能让它工作。

public class User
{
  property virtual Guid Id {get; set; }
  property IDictionary<string, List<string>> Rights;
}

映射
public class UserMap : ClassMap<User>
{
  public UserMap()
  {
    Id(p => p.Id).GeneratedBy.Guid();
    HasMany(p => p.Rights).
                 Table("Rights").
                 KeyColumn("Key").
                 Element("Right").
                 AsMap<string>("Rights");

目前我在黑暗中摸索,我如何才能得到这个工作。映射字典似乎很容易。string, string>但是映射Dictionary<字符串,List><字符串>>以这种方式?

如何映射string和IList<string>在流利的休眠状态

一种选择是稍微欺骗一下,使用一个仍然使用IDictionary<string, string>的后备字段,但将其暴露为IDictionary<string, List<string>>

public class User
{
    public virtual Guid Id { get; set; }
    // Map this one
    protected internal virtual IDictionary<string, string> RightsInternal { get; set; }
    // Use this one
    public virtual IDictionary<string, List<string>> Rights
    {
        get { return RightsInternal.ToDictionary(_ => _.Key, _ => _.Value.Split('|').ToList()); }
        set { RightsInternal = value.ToDictionary(_ => _.Key, _ => string.Join("|", _.Value)); }
    }
}

确保你只映射IdRightsInternal(你可以映射protected internal属性与NHibernate在这里解释)。

干净的解决方案是将这种关联扩展到onetmany关系,或者更进一步,使用NoSQL数据库,它提供了对键值存储的出色支持。

还有,看看这篇文章