【问题标题】:RavenDB and Composite patternRavenDB 和复合模式
【发布时间】:2012-11-04 03:56:54
【问题描述】:

假设我有这样的结构

public class Form
{
   public List<Field> Fields { get; set; }
}

Field 类可以是复合的,并且还包括从Field 类派生的其他字段,所以我有某种层次结构。该表单作为实体文档保存到 RavenDB 中,并且可以正常工作。我只是想知道从 RavenDB 获取 Form 实例,我希望 Raven 创建适当的类(类,派生自 Field 类)。因此,假设我有两个派生类 FieldDerived1FieldDerived2 并在将它们取回后将它们放入 FormFields 集合中,我想要两个具有实际类型的元素 - FieldDerived1FieldDerived2以及我添加到这些类的所有其他属性?

【问题讨论】:

    标签: c# nosql ravendb document-database


    【解决方案1】:

    它会工作得很好。 Raven 使用 Json.Net 进行序列化,这将为您的数据添加一个 $type 属性,以便可以将其正确反序列化为正确的类型。

    假设您的字段如下所示:

    public class Field
    {
      public string Name {get; set;}
    }
    
    public class FieldDerived1 : Field
    {
      public int Length {get; set;}
    }
    
    public class FieldDerived2 : Field
    {
      public string Color {get; set;}
    }
    

    Raven 会这样存储 Form 类:

    {
      Fields: [
        {
          "$type": "YourNamespace.FieldDerived1, YourAssembly",
          "Name": "foo",
          "Length": 10
        },
        {
          "$type": "YourNamespace.FieldDerived2, YourAssembly",
          "Name": "bar",
          "Color": "blue"
        }
      ]
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多