Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何映射字符串和IList的字典<;字符串>;用流利的nhibernate?_C#_Fluent Nhibernate_Fluent Nhibernate Mapping - Fatal编程技术网

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)); }
    }
}