Dapper正確的對象/聚合映射

dapper

我最近開始評估Dapper作為EF的潛在替​​代品,因為我對生成的SQL不太滿意,並希望對它進行更多控制。我有一個關於在我的域模型中映射複雜對象的問題。假設我有一個名為Provider的對象,Provider可以包含幾個IEnumerable類型的屬性,這些屬性只能通過父提供者對象(即聚合根)來訪問。我已經看過使用QueryMultiple和Map擴展方法解釋的類似帖子,但是想知道如果我想編寫一個方法可以帶回整個對像圖表,如果Dapper能夠一舉做到這一點或者如果需要做一頓飯。舉個例子,我可以說我的對像看起來如下:

public AggregateRoot
      {
           public int Id {get;set;}
           ...//simple properties
           public IEnumerable<Foo> Foos
           public IEnumerable<Bar> Bars
           public IEnumerable<FooBar> FooBars
           public SomeOtherEntity Entity
           ...
      }

是否有使用Dapper填充整個對像圖的簡單方法?

一般承認的答案

我有類似的情況。我讓我的sql返回平面,以便所有子對像都返回。然後我使用Query <>來映射整個集合。我不確定你的套裝有多大。

所以這樣的事情:

var cnn =  sqlconnection();

var results = cnn.Query<AggregateRoot,Foo,Bars,FooBar,someOtherEntity,AggregateRoot>("sqlsomething"
                (ar,f,b,fb,soe)=>{
                    ar.Foo = f;
                    ar.Bars = b;
                    ar.FooBar = fb;
                    ar.someotherentity = soe;
                    return ar;

                },.....,spliton:"").FirstOrDefault();

所以Query標籤中的最後一個對像是返回對象。對於SplitOn ,您必須將返回視為映射將運行的平面數組。您將為每個新對象選擇第一個返回值,以便新映射從那裡開始。

例:

select ID,fooid, foo1,foo2,BarName,barsomething,foobarid foobaritem1,foobaritem2 from blah

分裂將是“ID,fooid,BarName,foobarid”。當它在返回集上運行時,它將映射它可以在每個對像中找到的屬性。

我希望這會有所幫助,並且你的回報設置不會太大而無法恢復平穩。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因