如何映射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><字符串>>以这种方式?字符串>
一种选择是稍微欺骗一下,使用一个仍然使用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)); }
}
}
确保你只映射Id
和RightsInternal
(你可以映射protected internal
属性与NHibernate在这里解释)。
干净的解决方案是将这种关联扩展到onetmany关系,或者更进一步,使用NoSQL数据库,它提供了对键值存储的出色支持。
还有,看看这篇文章