我有一个类,其中包含一组结构为字典的值,其中键为字符串,每个元素都是字符串列表。
如何将此映射为单独的表而无需定义其他类?
我已尝试过以下代码,但无法使其正常运行。
类
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");
目前,我在黑暗中摸索着如何让它发挥作用。映射字典似乎很容易&lt; string,string&gt;但也许不可能映射字典&lt; string,List&lt;串GT;&GT;以这种方式?
答案 0 :(得分:0)
一种选择是作弊并使用仍然使用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
(您可以使用NHibernate映射protected internal
属性,如here所述。)
干净的解决方案是将此关联扩展为OneToMany关系,或者更进一步使用NoSQL数据库,为键值存储提供出色的支持。
另外,请查看this post。