C# 如何映射字符串和IList的字典<;字符串>;用流利的nhibernate?
我有一个类,它包含一组值,这些值的结构是一个字典,键是字符串,每个元素是字符串列表 如何将其映射为单独的表,而不必定义其他类 我尝试了以下代码,但无法使其工作 阶级C# 如何映射字符串和IList的字典<;字符串>;用流利的nhibernate?,c#,fluent-nhibernate,fluent-nhibernate-mapping,C#,Fluent Nhibernate,Fluent Nhibernate Mapping,我有一个类,它包含一组值,这些值的结构是一个字典,键是字符串,每个元素是字符串列表 如何将其映射为单独的表,而不必定义其他类 我尝试了以下代码,但无法使其工作 阶级 公共类用户 { 属性虚拟Guid Id{get;set;} 财产所有权; } 映射 public class UserMap : ClassMap<User> { public UserMap() { Id(p => p.Id).GeneratedBy.Guid(); HasMany(p
公共类用户
{
属性虚拟Guid Id{get;set;}
财产所有权;
}
映射
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");
公共类用户映射:类映射
{
公共用户映射()
{
Id(p=>p.Id).GeneratedBy.Guid();
拥有许多(p=>p.权利)。
表(“权利”)。
键列(“键”)。
元素(“右”)。
AsMap(“权利”);
目前,我在黑暗中摸索着如何让它工作。映射字典
IDictionary
的支持字段,但将其公开为I字典
公共类用户
{
公共虚拟Guid Id{get;set;}
//绘制这张地图
受保护的内部虚拟IDictionary Rights内部{get;set;}
//用这个
公共虚拟词典权利
{
获取{return rightsternal.ToDictionary(=>0.Key,=>0.Value.Split('|').ToList());}
设置{RightsInternal=value.ToDictionary(=>0.Key,=>string.Join(“|“,0.value));}
}
}
确保只将Id
和rights映射到内部
(如前所述,您可以将受保护的内部
属性映射到NHibernate)
干净的解决方案是将这种关联扩展到OneToMany关系,或者更进一步,使用NoSQL数据库,它为键值存储提供了极好的支持
还有,看看
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");
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)); }
}
}