【问题标题】:RavenDB issue storing object that inherits List<T>RavenDB 问题存储继承 List<T> 的对象
【发布时间】:2013-08-05 19:47:28
【问题描述】:

我有一个继承自 List 的类,这个类有一些额外的属性。当我将父文档存储在 RavenDB 中时,会存储列表项,但不会存储其他属性。

下面的失败测试可能更好地解释了我的问题:

[TestFixture]
public class RDBIssueTests
{
    private DocumentStore _documentStore;

    [TestFixtureSetUp]
    public void TestFixtureSetUp()
    {
        _documentStore = new EmbeddableDocumentStore
        {
            RunInMemory = true,
            UseEmbeddedHttpServer = true,
            DataDirectory = "Data",
        };
        _documentStore.Initialize();
    }

    [Test]
    public void StoreSimpleDataTest()
    {
        string id = "people/1";
        string laptopName = "MacPro";
        string personName = "Joe Bloggs";
        string attrOne = "Screen";
        string attrTwo = "Keyboard";

        var person = new Person()
        {
            Id = id,
            Name = personName,
            Laptop = new Possession<string>()
        };
        person.Laptop.Name = laptopName;
        person.Laptop.Add(attrOne);
        person.Laptop.Add(attrTwo);

        using (var session = _documentStore.OpenSession())
        {
            session.Store(person);
            session.SaveChanges();
        }

        using (var session = _documentStore.OpenSession())
        {
            var loadedPerson = session.Load<Person>(id);

            Assert.AreEqual(personName, loadedPerson.Name);
            Assert.AreEqual(2, loadedPerson.Laptop.Count);    // 2 items in the list
            Assert.IsTrue(loadedPerson.Laptop.Contains(attrOne));
            Assert.IsTrue(loadedPerson.Laptop.Contains(attrTwo));
            Assert.AreEqual(laptopName, loadedPerson.Laptop.Name);  // fails here - Person.Laptop.Name is not persisted in RBD
        }
    }
}

public class Person
{
    public string Id { get; set; }
    public string Name { get; set; }
    public Possession<string> Laptop { get; set; }
}

public class Possession<TValueType> : PossessionAttribute<TValueType>
{
    public string Name { get; set; }    // RDB doesn't persist this value
}

public class PossessionAttribute<TValueType> : List<TValueType>
{
}

从测试中可以看出,Possession 类上的字符串属性 'Name' 没有得到保存。

我需要做些什么来让这个属性持续存在吗?

非常感谢!

【问题讨论】:

    标签: ravendb


    【解决方案1】:

    JSON 无法表示既是列表又具有属性的对象。 这就是为什么你不能这样做。您可以拥有一个包含列表属性的对象,这是一种更自然的处理方式。

    【讨论】:

      猜你喜欢
      • 2010-10-28
      • 2010-10-22
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 2011-02-19
      • 2019-10-03
      相关资源
      最近更新 更多