1

如果我有一个只有私有属性的对象,例如

public class Foo
{
    private int Id { get; set; }
    private string Bar { get; set; }
    private string Baz { get; set; }
}

并将其存储在 Raven 中,它将存储这些属性,并且一切都像魔术一样工作。如果我想对集合进行某种只读查询,我将如何使用索引来执行此操作?(我实际上对任何解决方案持开放态度,即使它不使用索引。)

显然,由于私有访问(并且动态不能在表达式树中使用),这样的事情不会起作用:

public class Foo_LineItems : AbstractIndexCreationTask<Foo, FooLineItem>
{
    public Foo_LineItems ()
    {
        Map = foos => foos.Where (x => x.Baz == null)
                          .Select (x => new { x.Id, x.Bar });
    }
}

我确定我忽略了一些东西,但是一直在网上搜索,找不到任何可以回答这个特定问题的东西。显而易见的答案是使用 CQRS 分离读取和写入,而不是实际保存原始域对象。(这只是 Raven 和 CQS 的实验。)

4

1 回答 1

1

我们有用于执行此操作的无类型 API:

public class Foo_LineItems : AbstractIndexCreationTask
{
    public override IndexDefinition CreateIndexDefinition()
    {
        return new IndexDefinition
        {
            Map = @"
                    from foo in docs.Foos
                    where foo.Baz == null
                    select new { foo.Id, foo.Bar }
"
        };
    }
}
于 2012-08-29T11:07:07.580 回答