2012-08-29 72 views
1

如果我有一個對象身上只穿了私人性質,如如何創建私有/保護性的投影與RavenDb

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

我確定我忽視了一些東西,但一直在網上搜索,找不到任何答案這個具體問題。顯而易見的答案是使用CQRS分離讀取和寫入,而不實際保留原始域對象。 (這只是與掠奪和CQS實驗。)

回答

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 } 
" 
     }; 
    } 
} 
+0

究竟是什麼。非常感謝你! –