1

次のようなプライベートプロパティしか持たないオブジェクトがある場合

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

レイヴンに保存すると、それらのプロパティが保存され、すべてが魔法のように機能します。コレクションからある種の読み取り専用クエリを実行したい場合、インデックスを使用してそれを実行するにはどうすればよいですか?(インデックスを使用していなくても、実際にはどのような解決策にもオープンです。)

明らかに、このようなものはプライベートアクセスのために機能しません(そして動的は式ツリーで使用できません):

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

私は何かを見落としていると確信していますが、Webを検索していて、この特定の質問に答えるものを見つけることができません。明白な答えは、CQRSを使用して読み取りと書き込みを分離し、実際には生のドメインオブジェクトを永続化しないことです。(これは、RavenとCQSを使用した単なる実験です。)

4

1 に答える 1

1

We have untyped API for doing this:

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 に答える