RavenDB问题存储继承List <t> </t>的对象

时间:2013-08-05 08:58:38

标签: ravendb

我有一个继承自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”不会被保存。

我是否需要做些什么来让这个属性继续存在?

非常感谢!

1 个答案:

答案 0 :(得分:0)

JSON无法表示既是列表又具有属性的对象。 这就是你不能那样做的原因。你可以拥有一个包含list属性的对象,这是一种更自然的方式。

相关问题