From 6f5eb71dadfc0abfc10db21c8017107fab293851 Mon Sep 17 00:00:00 2001 From: alexandre-spieser Date: Sat, 10 Feb 2018 18:32:45 +0000 Subject: [PATCH] Prepare for 1.3.5 release. --- .../CoreIntegrationTests.csproj | 5 +- IntegrationTests/IntegrationTests.csproj | 25 +- IntegrationTests/packages.config | 1 + .../Abstractions/IBaseMongoRepository.cs | 1 - .../Attributes/CollectionNameAttribute.cs | 3 + .../BaseMongoDbRepository.cs | 1 - .../MongoDbGenericRepository.nuspec | 4 +- .../lib/net45/MongoDbGenericRepository.dll | Bin 67584 -> 70656 bytes .../lib/net45/MongoDbGenericRepository.xml | 1230 +++++++++-------- .../MongoDbGenericRepository.dll | Bin 67584 -> 71168 bytes .../MongoDbGenericRepository.xml | 1230 +++++++++-------- .../MongoDbGenericRepository.dll | Bin 67584 -> 70656 bytes .../MongoDbGenericRepository.xml | 1230 +++++++++-------- 13 files changed, 1997 insertions(+), 1733 deletions(-) diff --git a/CoreIntegrationTests/CoreIntegrationTests.csproj b/CoreIntegrationTests/CoreIntegrationTests.csproj index fdc9f8d..2131d29 100644 --- a/CoreIntegrationTests/CoreIntegrationTests.csproj +++ b/CoreIntegrationTests/CoreIntegrationTests.csproj @@ -9,16 +9,13 @@ + - - - - ..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Configuration.dll diff --git a/IntegrationTests/IntegrationTests.csproj b/IntegrationTests/IntegrationTests.csproj index 586079d..56b3a58 100644 --- a/IntegrationTests/IntegrationTests.csproj +++ b/IntegrationTests/IntegrationTests.csproj @@ -30,22 +30,35 @@ 4 + + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\DnsClient.dll + - ..\packages\MongoDB.Bson.2.5.0\lib\net45\MongoDB.Bson.dll + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\MongoDB.Bson.dll - ..\packages\MongoDB.Driver.2.5.0\lib\net45\MongoDB.Driver.dll + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\MongoDB.Driver.dll - ..\packages\MongoDB.Driver.Core.2.5.0\lib\net45\MongoDB.Driver.Core.dll + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\MongoDB.Driver.Core.dll + + + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\MongoDbGenericRepository.dll ..\packages\NUnit.3.9.0\lib\net45\nunit.framework.dll + + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\System.Buffers.dll + + + ..\packages\MongoDbGenericRepository.1.3.5\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll + True + @@ -73,11 +86,5 @@ - - - {efc776c4-2af3-440c-be80-3fbe335817a5} - MongoDbGenericRepository - - \ No newline at end of file diff --git a/IntegrationTests/packages.config b/IntegrationTests/packages.config index b8fecf4..6da7266 100644 --- a/IntegrationTests/packages.config +++ b/IntegrationTests/packages.config @@ -4,6 +4,7 @@ + diff --git a/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs b/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs index 23548be..f7274e8 100644 --- a/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs +++ b/MongoDbGenericRepository/Abstractions/IBaseMongoRepository.cs @@ -163,7 +163,6 @@ namespace MongoDbGenericRepository /// For the entity selected by the filter, updates the property field with the given value. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The type of the field. /// The document filter. /// The field selector. diff --git a/MongoDbGenericRepository/Attributes/CollectionNameAttribute.cs b/MongoDbGenericRepository/Attributes/CollectionNameAttribute.cs index 128f87a..7a5984c 100644 --- a/MongoDbGenericRepository/Attributes/CollectionNameAttribute.cs +++ b/MongoDbGenericRepository/Attributes/CollectionNameAttribute.cs @@ -12,6 +12,9 @@ namespace MongoDbGenericRepository.Attributes [AttributeUsage(AttributeTargets.Class)] public class CollectionNameAttribute : Attribute { + /// + /// The name of the collection in which your documents are stored. + /// public string Name { get; set; } public CollectionNameAttribute(string name) diff --git a/MongoDbGenericRepository/BaseMongoDbRepository.cs b/MongoDbGenericRepository/BaseMongoDbRepository.cs index 77ab063..3722846 100644 --- a/MongoDbGenericRepository/BaseMongoDbRepository.cs +++ b/MongoDbGenericRepository/BaseMongoDbRepository.cs @@ -281,7 +281,6 @@ namespace MongoDbGenericRepository /// For the entity selected by the filter, updates the property field with the given value. /// /// The type representing a Document. - /// The type of the primary key for a Document. /// The type of the field. /// The document filter. /// The field selector. diff --git a/MongoDbGenericRepository/MongoDbGenericRepository.nuspec b/MongoDbGenericRepository/MongoDbGenericRepository.nuspec index 799f982..804763a 100644 --- a/MongoDbGenericRepository/MongoDbGenericRepository.nuspec +++ b/MongoDbGenericRepository/MongoDbGenericRepository.nuspec @@ -2,7 +2,7 @@ MongoDbGenericRepository - 1.3.4 + 1.3.5 MongoDb Generic Repository Alexandre Spieser Alexandre Spieser @@ -10,7 +10,7 @@ https://github.com/alexandre-spieser/mongodb-generic-repository false A generic repository implementation using the MongoDB C# Sharp 2.0 driver. - Updating MongoDB driver to version 2.5.0 for MongoDB 3.6 support. + Adding CollectionName attribute to specify alternate collection name (thanks Etchelon). Copyright 2017 (c) Alexandre Spieser. All rights reserved. MongoDb Repository Generic NoSql diff --git a/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.dll b/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.dll index ab0f74eb693b61727af8b0927b7ca71f2739f871..02f7392888866ee704b0948ed760fca3dc077152 100644 GIT binary patch literal 70656 zcmd3P34ByV5_k7|b7eBQCNq!!K`!ya z8x>qs6!2J4JWxSVQ4udtR8&-SaY4M$^lCcDt(nRn^tq z)yI4D<}nUG|0baeA#5l|j|#C7oc;zeJwBNab8@?9lf{OF9ql*D@*V9frq?v&&8iPg ztFN4yH?^{^F4UMer8=*EPF-G2U0&J9(RnjNRn^^+lHBs269eVoH#pEl=mHuyX1xba!FM?8x zBmr@EQWBc~O_ss~U3d8PYi>Ip&Wm-OycaNp2J9;gT0@;3;*?^a)38-gSCRiMwD1Me|@LoC%;^iy8(M}5!OZV@~PaH8B{ipzSoT&?0_h z#VhnkfO#+jERxBxKavIR2op;5O0U4|h$63OB1JG8q!4k^yW2!NaHKU2?SU16VYL_O zKCd|9#~PH5P!4-X+lH0f&V`oRZp++g8?m7CNAkcOVM0dRST@u)DPnDBqwVw1Hf(8n z&<>BTvQQ6ofRDQ<*%9hUwKXSq$`L|O++Dx@-0diKI6?&gd(crNuE^+Z&B? zLP2<7fD-Fk!{TmJDBNfY<2CY!)_4qE;6`JBE4VR+B9{G;VsJ;8kTC{qGa3UaVq<8Q zzXZ6TTWIPy`9r6-fsh){z~l!{gXGxhi#ZM= zABt<}u#?=uAp}n_R$yl-RVf288W;*GhB2c}&LL!8gJ&_fMb2h!bej4MM}c+7eI5e~ z?HlZ0a9d<7b9-bQbEEI$S@uWH2X}-C8GZK}eJ4d+-!WNy4kg=y7r@rltwBnMbCE*} zVh)S+_`b%Dr(^nR=ls%{)@m$HkRF;qorudoYf+7P!&vD0!8w?Sx|D+pncE_hnA;^eHct!sNWG_kc^4-mrDjn_6DiyXLy#TIk} zS!25}x(8EK{~BSX{>@=-i(JCo=;x&@`y-cuJHmvFer6f{B!#7)E#~wO`g!6xr9Fu4 z%Q>CP{n8_sGq**;%^k@?JRkp;}{k%i2$rWdhb3}P|M{>YW!jxZr(5IM#mND&=GbnoDd;T$dD zs(R!q=C;Vy%|mXonPLJ9aS$V72{-ZdCJL2S+I9;(8vQ9=U;e@J6u6O)UE(H-kIEgp47# zGloox;H@Bq=pS9HKLy88oYt@mO1f6x299ervH!}ox>NkMn&R$c-T&lT9lKu)=3&60 zJJ4Do#;J?;YCbeu5F#dWIZWma@d_a2ZC=m)D$jSas~-6ib6aF3b0gn(vFwlB4ekgN zGVNP6d5Y+ z8m_BH)-pHZ-OsW=@&LFaOvs3rZ^R>oC0>H~1@Un7rZqeWi(B2z>wy`C4t?H3P!)8| z=rr%o5RNz=25neJy7^=Y79eC0Q(P2T4`{uqZ}Gm*w-a|;MdmG7=Jlm~_vP4G6u)#R znxVsBjoZBY3NlXkw(-8;InikuS@A+8>;==9SF4 z_~^W&xy({?xdCD6I`$NEV=kX&*&lfZ+z}>Z%w-o00oPelSmrWr?PJ@Y*xJYSgxBas zZcC4BVs48(%iQS4b1eHKo53AnLPkF@Z`2P`So&eC{cIKYd9JHRUSMvEyvW>$yM<+c z+VCdn=94AZ4IzUkfkfT{jIMnwjG|W7es`)+24DX8VXl3A z{!*WX2En+KqU~f|{Mwf>w*llqcT783hxKUr$n<}`_FGyn&DOs0Iijt~|8}%X>vacn zTjXu#_Q*TTgFC?@@3QQVya(BKuhONA`m|!i0?e_vQXHks^2i z#G0S>D*ji{Q+~c?Zi{@w+#dOsxe@<6mi>`~;EpgMBYr<4J}E5mPc%RM|HJ&4{>V1x z-)?+NOwjCcpAvoaq@W0o*iPa8Mdt$xUd_i)RX^^&Egk0Q=S(Al<%TQtBgSa6w;0h_ zbLS&w2bI&G;7mFFnYk_U3v+wq5Odsf{+)&3Kfoftvh0ui2JQ$GGLm~LcfN@f!QVkJ zdC_}YtS4UE|ALy@In3M^`8RWWisd$-%*b}p)6-O>T%dBFvd}jwWq-JqAP;wsJs*hm|TnM*@g3PfZ8(hj$R=|$VaA$ z$C!>Dy`p8)jP^&3zbk@!@r-xrg|VvK3dVROKrMy*2y8T0e+D|^2nL{N$N;&V*Tpo9 zw=>48FQq~z;U1j@M2$xBI7obNFBNnR0WJrW>uC=1n#(^I4t9E>!p zCrE9eq;pLZrDzkkK`pfzi-u*4IX&X1K{$e_;V$;3NFJPumre1yHROQJr%V>M)xw(M zI`fQRF8Q?84L(l`wguL(AYsldM96D5WCnxcxbVUVSot-qg zKo|K!IA@9q4WnL<19+C<5-dRYWBd^Be;ZpD*l)&li!;`|zvhRVPUxR;t*{B)Z&>Oa zXBf?@*O}Snjh7L`Wz-SeLrKI0+h}4tU2HF990@$kBo>y%eN!O z895An#=R|{EuAqII$QAN2cIqYDhJ#+Qwmx3M~c85VM4~4aysS>MYOj-rJU#MTmEBC7_w~c52%x#gAm>d1-&ayw!1KbfN zWb_O5sb8ds>sM}cj?`yWZ^yw_4Po#)G8sT+}v(#8O*3ZwDZ$N+Fhn2^zrvyFa`B6=A^KXma&xhdz_G1m=_eeT1l+>Ra@$lMk=jk)pp zU=Yjx$Y5|sn2^y2oC`ERq_BKG_`^PghMg>x~M+tDNAnA;-bnHy{Oe3t!@3&0&=LPj6XHTpn`*4A!IeK6K; zA1&;_`K{BJMn#1R`3&@^aYr&I1?NF=hGw8fLZKh%ijYoKjIVbJpZEh`+(f|Fc(hu0 zp>g@`>cXdHYmiuHD#&|^#VfA*6yFiYJLo{e1PnQ&VIt^!CtZZP%_A1N5DJW#p3N@8 zHHrQjcEZ1){##th>(TdFq4yc%Ha`yIPJUKBZZM;E+}X^kf7rxN61LcTX~0i{sCX|D z{=mea5&p`=ePJ|2o3|GO^ti zU;o->_)fx4gQ)&*A-vbb-x9X;58o@#strdVi-eN1tX zDV}MHqfBwKDb||ed{ex^6jz$!I#b+eid#+bZBzWj6c0wl!uzy_NjR7zE*#NHOki;` zY2769hr>epu4*^V>|VGg+WS8ONz1-|G(LnD1nPf7ID8YJ2SSyoMIQ&IfZtb;S$~)< zS$aljDr?&CVSit+3W&Fu&9DTkp$O9Pe@s+ct5H?m`wEVUs@gN6(k3m`>hbOWES*2) z+l+=-V`Gg@k0Tw0XK7&?u^zezy$MYNDIB4NDK&Vn3|DeTXu8r-j^cEDZ(N0}lpsHv zsucVPQQfv;4ee`TuEVNC<=|xGaTa%X>cJX>F7E8)3n6!0seCS-pRN=qI+RA!3mupb zU0h_gX9kb8$Ni4AM-I{UqK)ZhV@{*}mK!VRs&&%&+O6^Xh`ljJTUX6jh}&GO2}iMJ zE41Nb+YAgLV|-$fUw4KshHMMruE?nLxtM_2y=HY>bjUW5t;%__Rz|DlCVJ0dU%qL5*j^gkf(B~vP6i(BEpQ66o5y%LI zVB{%vSQcC1ds=-5M6NFf3C@B`{kV8|Il(1SD+eg-rnQ^Yu4`yEHP==PeokF9o-^QC zh3HFp(YvSCUrSYQ0cog*=jAqiyu0o7b=WK(%@t~Z$`uGUf+afrGyF3g7iP>D=eTfu z?@yhM3-xh@g<4>S9^6Z@FVbi{^fy2L!B*iV>eD(u`3ZgrXDv7fA%kC0Jv;!wV>#oA z01Hrfq6!wENQx?0z|(+z6h#l>eu5(;N9`=20&X&mkSw6WC1?;84p9a4k=~zs5xgJe zKYS^SZY_Knjnh#)!KsDkQvb%_E;1^g2iZ{jyt?sRIU#g8yh33Rk5>yefp;CC1q$2| zil@0E5n@gAK)rYhH5L&*KSv9b)}u8MJL1RZZ>jlJ6$F_N?dMtPHm%(eBMMhfvjrEB zAw6ClTnJ?$zvoDA+bq6CWECS`AEQk@xQNX>Ry?m2c#?^+E`}0gy%H?Z(I3yxgce=` z5FCg8b+v!?R!kGR3TjVLvMY2ogd}GIC&U$f8#CDvI4QwZ>~I-xWFk=o8rx(Srl%0wDE)(UB{R)|?fPF0$%6^_EyVXU`+#n#HL0P$;uG{>$LO2~263WwpfVq}Z(39S|C6RnkH#G7sdrL}S) zB@AnYw6s=;TQWwKnynR%!}a6Vim5))wL)D``NKKe76=DSHts>NYXrWI!k)VwO62hl zFyt`+eZz9dNeNnb1$g965NAS|7;l}OnE&Q4y{6mK>?iuFYQjz=)%u+f z_u6Zk{l4HNq~7Se&+AZo-4UD&ZD=K$<-L9vgs#S3r(Dqd-A%md9#ERUN}9ikT9~vn zf5eaY5jvYsN2-MRyB93>9-jy2q?2|%N90Ip&ftA;`P>(;b_G{MTR0edp8jaVmtzjj zN6CV$&P?ix9$Z77)_JsxZ{TwZ&*NGcF^~6yVeelad;o&+qV0o_w5EqZj|6D)jF)Yv zU{pys6-dt$iwS=ivUQ=a0}ed`!ijnmf=U!MMu}Qayy-DeO4L-9DAH1*h#&D+M-xSr zkf_JOVsG$LqWE~^h#Uz^-b|FKR*AxR>D_tC)FaQu&P3{g$`4w@vysEGygUID^714Y z*7vp0ACsC5u(gyL(i^D>J_S(=Kh5+R&=77?@misI{b)5+)IOzZ6Y-{JK`B*83a=^B zQmTksQbmGVg9|L&(JO>koxET!Vr%4Mx56So@ zI~mJ_5$=?WiX6`1G;l5a0y!9oc@d%(-U6x;V^f>W7K$Y%$%}tS0uOZ`LhWe@k(Y=y zy$tHrwcvD0%LFY<+9a)sm?bMz1woEkKz7EJD_TV?SvSbff3NzL;4^t2Sqr0NVaaMcgeA(Lz)_+4fP)JruRW5%5Lha+;NxD92hqgiS3?4cf5^5PJ*c8oK57fi^@2Vht`S3++& zdyLe42wO|3A$>G8A3=_LyZr=?9cr4gw3~R-$Dov@T9qZzQkIBY)(%x__1NKv94RhK zraGFX7S;~6Z^@DMeEtL`GTCj(8Bx4!#I1sgs6oNfU3;=@!3NS;_Uf~Sku>_ zboR`myx@Q)EzTZdmb6fnR?i-e$ARL`9#h?X{j7gJcJ@&7ae4VImX~i}!qC12!}_@j zdM*4NfSDRbaj8)U^g*~;59sfKweSz5HI~mGCy81|lKw`l=|@mX628IYB#{1>0TeHu-@xa4wmg4O2IgMX9|pEOU#l1s)8VK8Q>c)j>SQ+WX%ki>SzX{ z=iQ>4V{4Y0R%537cI#MOFk!3-U}~&xh-$2fBsLqX2fCKVN`WxeBw|g;pfuJ?)L2Q2 zu@bY4m8!HjR*uC%;>K#Kk26+ky4n18Ye<1|ekw?8&QGRy)M6jgXx(Jvn=*X#6N7jS zq`?_^@q%Fw_kq449deQu_JJ8sKU{$sp3f%3gpEzwd43Rn?n_M_aRfjcGDtU{EWt~W z4db6WWCCJYaj4kSvX(#cxAqSn5_Zmw-}DsI&<&1mdVI}s;!h0X-};Vztha3S%h3H6 zw>ssDwt5@lP1&Hd)zLlP>ZGNuPTVs2RH?iig{h8ipV(*o`yPv(71VeuXGKSt zkc)gUbygHW42IE7E!>I3W@klgyv@!<3WT$wGqI*1D4i8eG+LaCq{Uf5%raQ2(&Aac zu{cQFSz)T9gKgnlq^4ULYZsU>)cY8*6LlA_c-&yAo^a21;X%sIih3 zV- zR)(`K?jOS>>|79kE>cWGhaGJ^_%zN%d(02F{_dSL-kq$&U0kdG8sc+8~5n2A}&OjVkXnZt1XxG|gRjCm3)#yp#9S8y`4EzdJGs|PC$dvuTt#!Om_nV4nFRHgZtISkj28?&iC-k7P`xG{f<{XCTCxdtYT zc?KB9d zngdFSSgI01S|ozl5&tdG$)_p^aw%AB@;MCGM@W!Bih757eq94|ee!*2C$%9u~obJS+x79?pw?8F3{rzU60n6{tDi zp&MwvuYr!{`&w`{-xLYsypCAYQcxP_jcS~v#W;x_@!t`hZ>oYIH-N?Fo5OH@jPpiV zjQKXzuHa43n)7|d^|AS;R`uY`Z07H+Hpj+!3zQhqtza1E*w{n8Wl(70+nC-CdIAHb zP#EYP#F~~<9Srm)HBi!Gpu{W#r7Fz_%3-*E+(1pW8ff&|HUEa#IH^&~ICX&+#l#sr zpDSR(fbImtIO{B*V;;nPj~4zD458?kl`8>w>nHevH)8e%^D;Hfq{TE7 zvka4}G@oV;!}a5)*;F5AJyWZeaT@P24dZdHg$d)lA54w&0f=gx50YpD@tNZcJp>&3 zGYF0IVQ{r?DH6uHj#$$ppft|gXq;oUFljMPVn_UUNB1pNL6Aqm=wJ85_AZCw7#Qn) zSZ~JOHPy|ZNn4&>QOlNR(mJ0}XYp9q!-TOu2ByaPI7BtpCm$L+C=$l{B(bIq zpfuLo)tr(RVV668h1_NFkBzwG_Ogfy7^gbIisjm%UNvWah}cNdMCX(uVVs+YH9ZSTs}JPfffHD3VW%kqD4Mo|NFM!iV9X$vTwQOjxk zIHO2QXB2VE=A}x_&nOPW0piXmQ{DO*MXg%)uCbntGwLOnF#eap)I7feQQdoNg?P+* zj-AHM&M1n6d482x(>73==M`$6NsD8AUC(az^cd31fX5OpWy&h-$1mAs#cQt({R631fYiSkrr;G}b?Wr$7{yXD#2@M}Z9chC%xHVfO8?5jKElf}k zeF6)=Vs2n9Oy#3M5?S%~eKkViMx*VIkJcWA(PM!yj+NOv4F zS}ewM33`RA;~8Uy;d8B62Hd>}ct~vsH+uZ1;StE#cK0PFv<3WK_7VXoAmXbox^EP@ z02iX*#RAa-7`+tu{z_~@!L^D0Jv9BM8~;1oQQ&J)sJ;WG56X=Im^v|nl%krx3dNs8 zv`>1)>kv;e%}XZv7SChebg|D%)*n5qlO4jDygJn(E=?kOkm>DAOPHR+^nIrHd&s9# z$_wcZ@v8Q_!y(?+u1j%mch< z`@%H0SQ{ASb&F3DiE8liit|!?r8&gCE~?cRp6F)^MP8gp^aBs|e196zRVho*=i3p} zAx_a>LCixb)Z!%exq|&iCX#0xFVQY(6d@t$G06DH5BX};a*K1h4^x@W0(FQFb+W#V z$N}+ChTR_!*LjHsQtW=zbzhg_6(c=uG4|Iu&gCBRFG;38m-=aR-zO}@C}w-};s09# z>92?0ArM zt|}1CE!H4oZc)cH5xIh%^ZYw{k}Tdv9ORHaH=|Y?(Us|1jXa;@T2t8i9`p`T!)<-W zV}IE}{b|n`JCaKM-_4%)bC#B*lmAUV>f2XO4a+3t z5<6i_6%YCdC5n$3RVlQWJ&y*yOefnuZhgJ}WjejR`7NUtVI%Ydqx~^Nt$zvB9kw4i z%JZJG^q)iue$h=wdmo@bYvJ<`Ms2YB*9yP*jnU(HR=!rW5x+CqrxR+2H$ti23mD@j z{DRC8MwfAv0&$el4{XEdbV;80^oe>!LSt0LF?$FbqgNUA6AniIR%f-Ua$N{uT%n})l z@M;KR&K8-BBxmAM(S}i5_Kb)eskcuRgJIhw=Hcw5o}JB}^Fz z%-#gq1LwOhqrI4&kOi8PkeeYzpM)QDDUP^)&~4ba?K66acM=L<{UE&?=w?6Bqu##o z+~xYtEyYIHK*-|~ZpVJQhU>IZYpwVd zNHL@SV{sQU{}_LxZ`4+_x7KK__2EQ(N=FPp19|VgqC7{oJOa|+n|);k+@fjM*dIz zUG8XnV<*y%aEN>S|45+7-&rF6XP&EZ`cdSsKxs|394%^fi0F#7wn(Rw8Nu{<2Y0UV z<2^QxH7CZ(Ki0<@heo&BwT927sOSHmeQqz-XO!Y9^F-hWo%cdU0IOhl1}?Vv+h#9u zo{KAv@wd(HOgujW7f}A&X8)VBG6OeG3bo6enSl$TLM6`2GH}UM$eB1l0~bPt{^qj=bITRG1M;c>kQn6@*mm$ zjd4U#yTm|dRt$}D_Rh?;pwlzk#ZbG%n#_(dG|G8NWfoL+uh* zWOlKj`!n%jnE$9RuV$WPL7!*#jG=akGK)UT(jR#SviQR|qjrfUS@^dZ{I|_M$vGlx zumz3J8WKZY66>w&`!1{jhUM7M|tv-!^;a%-gc?v^$38WYOnt z`rBsjlDH~sxB-ABIUmRx5kp-PpU4^+LzA4ZWStX3hk-_0(C(};G1NKptE}@Z=!vYc zF;wULIcvNH`Pxi~p%Xm1<* zn*jdXX7AwCvS(XR+iZIFK!4lpS&1iS&ouy}aoJ5V^mN80*?66Z|F+qm&bTLgVH73Z z8CdLI5<@!@-_MRA`>xd8acE!mRZ&m-Q>i~>Uu{9ZSkUOye`a43wIw~De3tv#7&6F|RF+;uUOof*h|G=|nY zJLf(YL*r8h=ROfb?_jlVh@rBKC$gRvqw+|xIP*?#LDEJsEr!PCJ}WMbp^3TAiKUFT zNjf7pi#-a_8Tq_$wHNr?Ch3fPL5x#~&d3+Vc7^DS+#+&17@l-Sz9i06h|b8D#d3w{ zjC@6S_-NWD>5SYeCMZN_Z-%XJoS69z(mcQe{r}XbWFurOBKgQS?NX zSC%V8XQWTAiy>c|4C&#E$u>!6WE(jkhAP_R%36i!jLehUV`zDsj3o#ccV z+S{g!T&fVAb;WXf4BeA`lFTbH>e2bxOI{sAZL|Bz9~GkW^AtI%x8a$UI4*mje2mco z@rY|`?qIo!FM5l`KLhhK21{RG@+5SA#t=D`(ao8wyfwL{GQ{XW0-dd;@=}H9Y%P^n z#Ccw2*d(2prSe8bOR$S4=9bCzF;tK=RDQ^4f%x1#GxrSX=|`;}kaR+yA*aXCzU(vQ zR)y$<9wvW_pvsfQBTrYK1$l~Pyeacbe5kh%M_xsyh5&2h|co!^JVu_j3{)LPmq%pqO<%$xltiH%O}hI3ej0UMGhEX)T6V!N={dZ&hm@o z7KP|6$Gh`<3v)oySw2IKQ;5#;TDd?WI?LjOgWQ0Z^vqVGWTYgtI#ZG!5u>d8I<@6F24F zA)i&K3AW{On?l_@n{rpkoeCwUypVgRY{$2mw~NG-*K+TYg)#I_?me=M5$#PWR>>)h z4kVoI`Y?BuoT1RUu1|p)3{O{A*B80>%CJHMTweh#R-R9%{Oq|;E>-B|6uZD%ApEy2 z>1uaCMMT5ONVyb)%-M`SlfM&=)t{gjQOJSx8)X?i{?|G~)c zTrUNE0f(NE=X&Wn$Mjq;GZiA+W3v0XrtL8~NFlO4F3%io+8&qV6e8ObvbMssJt3PE zBHNR4F@JIdQ8{Yno}>Cig2uw%6qA z(@ooJa<@WcdtL6VF>SBQy$X@-4Y_-UX?sI{tq|GXlv^$~ZEwn*3X$zC`CzSSdrNLq zh-};CgELLrcDYd@vh9#J)tR;(a+N}4dt1_fFE4s7y)Bn2M7DQi)hyHYj%-wjY&&K7 zY}2+=PEd$!@5=Ie)Ap{Mpb**KlO+wN?LAqh5ZT_Bd5xy+ec4?hvh9+tIi_uw%v6YM zAIKjqwh!bHMzmfEl0KB#mr%VW!k_s=?rwP+BV+Y^EYCJ5HQY?G|5>1~--fATz5bNspi&mYG( ze60O6S~2ui`S@)`$Mwf8o``2_Z5eqU;7v`{RQ8V5SgqDMvg)n#W!1MPw-(3f=knCl zR6TAs|KDjSGasi>f8GW)*H~+MT4OZVI-c8`b7$4;agfi|$Bgj-tY;nHdKj&wrb=YM zpcKbg+cl{q4^KAfYL_{8R=Ksz|1b2`cCGUNqOI0qeubQ9;$1go<~lwHzDXq6x-zY+ zt~LGfcdm7>o%rd|+V1;L_14ql`2Dn=Hvez?Y|V3Pb7$3C=g6x6Z^ill?Swh8(|}g8 zk&XZES!B(sakdz{Cc2xNpFhSaWIcbPp3V22^&GIu);axO%hqXIFU&U1jdzv;Ae<)kv`%rkSv{inX9_+Qh-oJpe~0EHB8Ok~QjHiY*Z!rBBv<7c*(pw}G_<-&J?myM7&jUj?7ts(yFWmt zKJ4dO2ifx=znOB7JrAmtQU+|2TDM7>5f58EZ1u^4+~$}d={>cdWWMhK zN0v4@WrL$e>zug|ee0aL(cZ}M8@d0D9KVs{H?h8nd)36fYGP{>TNkr+F*0O{0~37@jWoVfM6XbmG}GTFD-ba_G^hmPezV z=+UT_Mb7?W%A~c}d22_iXtazCT={{pz3O{wL0XR3UYu zKJj__Ot(kSHyGtiC9i=5eL(6w)S?sPV?p1Mrm_FK;@8A$-0k&=X}7q0=+o2xPdWFYoP8?TTEP)2*jmBX3bsyQ>jbt=VCw`}-;xv9TE*5XwpOvV3f2_~ zRcx(gYb{%A*;)(hID0Ky8!8wlL+WXQ`I&o9TX>cl1N@wFG<83QeYX zlSqCM^Y~gqW>O92x*$o)ru3qux%w7IkEEC6of-X-zTow+hWoh&qgW)?XmkRv)2?++ zPMRw^d1oe#mp8b&$Tb?hA-)FV!Vmh%OI?>i9|=gvzO);YvgB1P)AR5R9Bl(f+n~`Y zx>=*Ui>(^nU98h`U0ahjaI_5^Z9DsKXaDWo`gXQ%XX`Gu?qcgMj<$=fyV$yit$WzI zpYyp#qqng4Gp*4EIY%ZR(mHv=$%i!>#U9kXA$bq#z9m-*8pUBP63B;4qgW}f3N*M^ z3L1q?r`>1Md57wBSK!m>t^ofD8(cSYbh9l9pX``H9Cg|f6Q4M$$Xk=JlfFo($YI^=MT zeH|j_rLEy;YdG2l_TRw%8`yt?;jbNr=LYuNz@D4ApPO}hFMcc6+RC-Ivwo}2drGJG zIB z+{1(1!-MQ|kbMrZ&ms0X#6E}E=MeiGVxPm@;$gISrq^cUePrW(WTX7sY}Eh5I=x4K zSf_97e9+Hwcx-exVzW{HZ8pk(4*TcW=)NVNieBd>dbDY;?!+xb~d$BX6;d z_F##P_Fz8Z{L7na-3R@)5xBU?AgekjqKTIqkEesWDHjdTVq;hU!#rga~9k31D$~o?t>j)U<6f=gUajO_t>j*<;kMRrTWh$jHQd%3Zfgz4U&GPXaI|&o zzmEOa!SjH=&c-LCjqYmJX)B!1`8IG*Hgiwbq3(CSb*SrdZ{?nB=ALZjo^0iwY~`M8 z=g8YR@^+5Aog;7O$lE#2c8;@)J$J$LEB7uN-LdTAp6_CxUF@@mefF@=9=7h`aqVHB zJ?yieefG1@e)ieVKI^o1oR9hs@+c1RDE6b)JO2Hs^_D!u{Xfig4|CnaT=y{7Jq*v0 zzQgcbkzlj)zOYk2ZFXAEHao3no1LQB?6m$p?Bih{kDcynJnZR#&v!l#d|YlH`}o+$ z$5tQ5@v)DOeR9|*hkbI`Cx?Ax4hA;K2mC(=Zq^s3{1&)ZFXg*d7w&4jcskhy^`tmOmAa)7t^&&A7T0w)90DK%5(?Q514+&bSO@AuNcF$n&}*-&okY@ z^fRX4GyOMHyNz?pG?!^troEY-%5*r>@l30k&Sn~6dJWUtnBL3u5vH4%z5(hI?=tGe!+V|o|UwM-vj`V`aW znZC+&2h$Ije#Z1mrr$G_4j2CQN}9t9+LdWikYAngANv9M5|=Ffa$$VOC_~3 zO#X?il6uqqbV)7nN%4$#fCZ)l6Sux{s-@lTSycrA((XUBq-X z(^r`8W2)QOpJ^%6sZ19!UCs0rru&%ccJ^ml%5*BzMNC&SeTC^hrn-aunU*r0%5)La z)l6Sux{s;uWPhfmOs6tk#B?>&SD5Z&s=L^qX(`jGOcya-&2%5ry@?Itx^{V<2JvpY z$)K5et3WTz+Y5SsUS3jz_%UxX=*jK3fG%#o7xeA+dCBnXFd1}8hgG2KI_w4gM+cG8 zAO>}u40>(HEugzP?ged|FH##sP5yk)4f$I@kL2$KJ+nZhHHcdaCWC%nFdwu_r@f$! zorJeRZ0WQL)YEwj==jciLGSM@(i_B2omZvP=(aG;^OHP?>13w!nTkMz7!Vu;dUbFW z==;IFpxIsWG8)81T_%G*)@2pw;VvSxL7Y)I2=vCn`JkT^=4I159K>`o)A>wSG2Oy+ zFH@02o_S0MF`b`7{aM9y3)8(!MK0;{4BD3a%ycr-`Aqk=y_J005uMC*6;qMN8m6n5 z?q!@rw&TiScrwTqD1f&uE`(P5O5Iu-?md ziS19e&uoeI{`ML6*X-Ze6CGV0TO9`-KIZ^um2-ph2j@K3R@bbA#}YnE$aa^xtKD~b`m6o7`oHqG59s&?%ZBgA9QdZjiT}Cqt%nD1HYMSIDfnM1{+EXT z3Gr~?_gwshOX5+`50hd{Lt_UWg8oRHuujNj=$FK|G6|6H!uhP>Uy>$)K7>Bvtyxe_JdA$gO;}J(yp7Xa z6Z`SKk`!NpYT^LCUy|Z0P)&S|?{lR122{iES7bx}4pb8d@qH8CQ32KPOBU@Q{|!{b zthI;yGpL5&t>_5(5U3YV6x)OTAUmS9A0elUpCS9iA;>=Q56Ji}3&?)_^i4;!d;~JS zh}1fwWt-L>)B(ATa6xW^UnA;>UU(p9i)6?-A{BCu@IuZNKFGNu0J*KmgxprNf!t2y zKyD}6Le3L;kn=Tp)Tv?j%YecM^RdcM*dicM(G% z7mISp#bN~Hu3{AAuHszC-9!cCZsI)1J;Y?lJ;W5qC88E`iKv6zTg-yoThv4DBN`$1 z5tl&jD=vfFS6mLcpJ;;IPt1edU(AQxUo3=tvRDlHWU&PDDdK9#r-*AI4-iWs4-hv% zK2_WV`BZTWx?2YnRsQ1KY#q2dY1e&imxL)6p7a8V&}Wfx82Sv+G+lsR&myh%PO zpOtu4EVpUjYKOIS{WSf0{WCquR%RP#yUO;c?I&A1`!M@C_RH;e**~)X)1K`()iKmD z&GDh*h@+Epg!2;TeCPen*PQPtaDBpS3HXnnySuq(xc}lVP8^YV zW#R*gn-cdV+C5!8=X(}|L8Cx4bKQxa0Tru0dN2dTQ#V)K#euroNN0Mcc8b?JI{Nycdd7;_n`L|uPwb@dR6+8^qbTFoW3I+KVji( z>+9z$^-b_ad{6rJ`1bh@`I7uY{g?ai_rL6a-ERw&1j++7fhB?a0mU7& zjm@Gs8u%XXlhOC}c8hkDmq5JVjri8RxnD0jpqlwzhwuHH`~8XQ;!Yns)s7u%#~j=7 zlT>!>O1sEJ$wFy^l8ussl8e$7r5#EhN_&(JC>>GqQ3_Bxp>#$GqI5wiL@7ckM(K*u z4do=1?kGJ_dZP3~DM9It(g&q4NE1AQBFe{gfbX~&P6&E%TR`* zoQ_lR4F07odeh+zyk|kb{t>^PNq{gf(unc_ng zKV9)N6hBk(VTzxn_}SpJzRyw7u@|&dMOjh>E%3i7Ll`2l9(oa!-Qxu-6{HCfnRmxta?A6L%t>RQG z{YA>}B88_ZziBGYbcLrYT%&M}ic_QN%~1LoN*N?D$Y#C_#HLnSEuZC zs(zi)hgAJpiqBT{W-EKW!u1L_DBK`^$Nu+;2Gw4psy|2B=P3IeWxqt}FHvzWQ~sAL z9#*_b@d!Ar=ZNy3r}S4SK40+#iZ28w|AoqbvBHZLUZU_4g|AllYK5;=_*#Xp2d2E< zsQAr_->Ud+ir=C53dR4V_+5(MqxijwuLh@nu2$`=Rd}t!4=DVA!Vf9@kiriu{IJ50 zDEx@R>lI$F@Z$e5=ivPXRf3Ni4EB)V;{%=bEH>Lkc z>3>rCpOpR=rT<0ge^L6sEB)V<{_jfvEA%w3e=7bj#s97NQN^V+{B*_biaWt+KAqCI z9wsQ9pm3tXi3%qvoTPAy!YK-;DV(Noy29xS`xW*poWazXF8|lwX1J>&$u~I!ojH>#Y2{D18^D z@1pcY(9?W$Rranb&Pht&L+N`ceJ{m(D}8T;`zrr46d$Je*~;&1+6%Q#sTk!_P=O}(DIIWjURr_-lo~v+J;jqFHg(C`Iq3{(7FHm@a z!iyAMr0|srU#aj_3SXu0H40y&@O27br||W_G#@uAezW4YD!*Hm-)%~Nhtl7n^eYrz z0o)tE`PoN4C2m6Ljb|&R;wgMyeoBl)!SevT)fbkxp!60ikqMv5-L_xk{RzLwcN5aJGF^naGE93)q-%e3j|YEF`V!N%lEj(fyu@GR^@*RtULe;)cK{{DGgI{S{35G71#+q9 za^$2*gk>LDk#rNvQEgFDsi;W8vj@l@B$dc-lWsvds{MrGO1@qUP425#Bn{S=Cy&v) z>x1>2l-c^gl)-vw%2L$70cEh>2z*n@7}kFS*`7LE@0dDR52oIZScCOpkS|XC9&vuv zzfE0+I=||@(tg#4r(GZ)OzUMMydL<6wB_*sRrh#*)eF5BK%OWErc|Q*s^9E=2K6?{ zx4l=|zD>H(=1E^Ji_&kj^-O=8tltlx_50zoem{|iy6sW71H9-7T|RIDa3|o-z(L?Hz=iNFf?N!_E97pF zPlDV7a!<&;Aoqsc2XbG?{UM(Mc>v^rkOx5?47n8YP{^l4J`-&WLmOv7cQ)j5$ipFz zfIJfNIgrnVJR0&C$mc;G3wb=`^HDB9!Mo!4EYMF}h%yOfGD;=lPeJ^tkgFh9L%s;| zG|1B-*Fc^D`C`a;gB<(NA?hH9AkTt48*)A52FQ(&=b+t7(C($cmjTZOz8p9Vp9ti6 zkgq`I7vLG`Lf}Qfc%vNu#x@|Xf_yb>*TQxk@KWIGVY?CXO^|Pf?N->90pA9EJ8a8Q z?u33N^mk#V?!oM=g6>|F)#$?-^kFUZ4?zDQboA!`pP_#k`gMr&2;w{n-Qy@vpgaZL z)6hKwc_YdulxI<%L!Hg2^E~7iQC@=I%kX;zd@J~?;M>4o1AiU-4e&R?--7RUlpQE< zqr8K%6Xji$_fXzP*@f}}%7z&{1w1O6HK=iq+kEh{{a6L{5Sag6Xkc5 zf1&&v zVw{HrlCwnsX>{6axqFR%1o3xln}}+)R~Ps z_23QQjo@>@F9E+4{4(&l;Fp7k!JEJ%;Pb$*0G|)O0DK|%BJjoFSAs7=?5j|&M!5#M zYoWUi@>0mxL%sq0MsWTcFtGomNj)cZ7XwCBHcYLot+~8<;1s1HQ%P^Kl~vbPH&zd? zteZQyVQ$@2@-PhS(kI@9t*j$!ufFltSOCMoF8$(NC_pdP4V*J+QV%iUjOxb0byZ_# zRaG`tkF2X6ST$)d-fn5IzMFYu&S80M^Dnm2GdM$WEz8v>3g;2U!tO0oqMoya8;F6 z$+{K-_oe{NrxyM0)rSlSVoo?^oR!fP07Z|!q@gM3#ZpU=OqYJ-j9iSWoK{nZc{CH! zJ8BwSTN@j7kN)sKeNNp}uwkq%om1ZssvjMiQ$MvD$`NyFYb&SJk~nN=-JF@#^)WPi zPGzG46_pJa!(-@Wv+AoG8frpyWgaXYLwUMHMNb^ z^>Hfh6vZE2-8el|HDpdrZB=zW;y15uTAD{OEfi<)rIj^k#4@195FzE&K!&o=R1CGQ zk>tVCrqx$ZLn=?NougFcH4S7cue^LNdDJ!b>Ur!$_UJwt+G7`BPuA03v&=&;RyN;f zwD~E>F?wu!(jU9nN_vpKrH#yn7JAc@D#ULnYz62>)rV$a`r;O6Z?-hwYCU_k(izsb z&}ND09~Zua4G3@DRy})@H>IG2r54t|VK}y-9(`g}SsHBFRz3TXO%2l8UI`nT?QPbz z&_I6*f)2N^-N?i{tEU)tMtx|`Ed0k@NL5o^TV+|{q^aX`BzE-9qTSE{-(h4@%g*d< zT*`X)n%t|!Ro15!eZN-p{Yl?aI>=BF!Xocef@$b41`H2X&8e*(h~+!zprp8uU zPur@dQp{|a8mh0YnL?8$M$c_%te)A;-1rUM&Zw?~-&A2;Mg-z>C@eD|&aK9^XDVHk z_&88|KL+FXfoL`giXC$uR@YEnZ^GueH^QSrbaP^M>KhtI(wS5_r`EXW2y?q2Gjtdj z)uPLbx*nS((QLg&duKWrT{7{s>c&ZkfTO!{OygA15D&>ZtctZ@=qX+Gs6}yRWnEQm z^{C4FMm|ofp{1j4OkG3eMMzy~Xyz=sy{Hl#qQS%?sxLibPED1l;I%16S2qr;GDNyM zseTN+c+#XHl~XUqDps~(RmbW^RL-nER$E3FipqxS<6DodR~o9TGp-=Ue+%hYkMpYQ z>2hS67V<)mMp2iKu0W6ThLcvTkZM zUjZtn*H>3ojYf_e=VEJA3-dCG3kmL;LJf44q$wIxH{PlT2O%?z(87D!{AGq%JjaEln5 zQCft98}T2jnlh)c+T7?IsgB~JW_1Ndr?zx7jo6c1HFoX+$98gbnbv>M;hZ1DIFDV<+t*rk4w0HHPkzLpQz8Og~ z8m&f}8OghAujJ==O|>{yw3~I)m^zL2!?xo6a8_E^#cQi0>8&*Ne0gTHD{U1zLlbCe z3<<rQ8VFQ?T@EMToG#W|>qOJ+14b_7s+TW_fRG8(2 zjZjQjR!h*{x{#Q4$+XRB*iQ?}ae0P$Y_q-=FnL1+J-)aoqL|W3a{<;x4>qTowJK6w zr*p)kO1)GL8WLI2FV++yU2YavgRllgFRibx(h?)sY_l0umdcw8rB)o=J*9DU>`~%M zkD3;W4cO2l4a`0q=eejshYcE!l@M5}5&Y~%E2z?wBaq_;*<4`Ve0$?u^=hqADRRLq zmUqQM9JyLrU2h29b|Pnj=5nJXt8Ub&I+Y%mf^u;~O3kR}rH9A24_L71I0MyNohRIRVK=9-UJYuBp_wNrrw*F{`&7Tb@q z#E)_rg5yIyaml6^h}E@b390?&^a>ghjaE2p`H#j;j04ZWOZG{;7VcC=7?E~uJH zsj4d11xDnxIx1Mw;2+PIgDpb#LcIFtzD;xc2MfmcA0RZX7h^L7rT_-N2# zY`0*}f)wYUE7g^0*oqVHT&eoJIlWeF(9Y%>*x1ocSaB}1&FsR4rgbXQDn1unSm!{d zi9u{}mbYxSZB!A$TZ@ZJx@(0$T&~yAEwl|2+mVVf>*iEUPq(q=s_co)sS?y(y@uo! z{he}j(P9!>yACikq1*RxuMYbs)TSh?iPN2B3@NfYy{w;dX<~Vif;EOSrQ&L})@+rQ zn@)i)KDZ@kK4@GkEeB1zpg={;ftu#Y+H!G8LJ%s8xWV8OpQf3u*UOtsKbn$%G(%}P z)zctYVl)#gpAJK$!`i{UV>qIKW~)|-!5DBDK^+CVRKxsQ;MPJTOAg_`{;89Ti>zZ44!NvP)h*@?$20PIvG!6~Z72Ti4nym5A)uyAs7O64VXiZ;I$J?Pf z;R#;O0?f{keVg3%23PgY*QSNaRSrq{2rF; z7HrLL+?49puxVE8T_c&xtSA8aW}_vm zF*ZMM z)KNp$fRzgclia|A&U5%K(+oa}ZzD@A4b9;@%a%EgZ(LpZ~4Yik`-H#Q47G>x-ym`Vt7G#|m(p_(q&o$G%QWER$vf5Sk0A za%ztOhVh4}hZ-Q5qVXwwQ@?_?627UYrYgh`O%*Yfc!v;JgwQyEfBzKT0(b~d9z2b2 z^{+~wt7zF0NEsuN%2kzfgyS5A-E(yG9hs6DWli)TqX2%7QY!*p0$=NxM?6U^avek2 zaa>X=cTI`esa~3(%h_5}iXWS@dZczZ4jpC-RI8!|oZW>ojW)n1=nktzEGuQ0^wa3S z1^rVBazd%2@rh@KpM|V7^cNYdu~$VporxRTB3izol<(CUzX94ypsur}cEVY?!7+|e zJ2m{{_yOjc*P2}E#+06#b=+8;KB%_Ld80Sco@gQTf(A4YX(7PK4NxeOf^bcJb3T^= zCr8v4y{eAU7$#_wyiyZY_VPG`tOt17Laah$)S4-DTT(O*c{A-lCZknha1(>jn771@ zamyTVid_ec&cX;q76@se#kJGHiOEpnFq~@IYW5;)Nx)A}sTf>W>r zZhyl%+|DkdjsZ^5`vj!pR4~-&gwplUCe9c^h*JSh4P1x)#T^{P+`XHlS&9d{-K7LW z5@)eg)OpM>orSyz7tj=)mBEK|0KVWFYJha)-WA365_4rB!ZJy6TqS<7D@rN!B8q9+ zzyFI|Qrrwjfr&n35GZv~VKCItr-9DdG(#b0nbsE%lnj#Hm<*TnjwrxsU<0LJdB4zR zxf9F2VGKNjK6pC;ORNgv@%;l;6m%G}%rKWf+?9Z_xEjrd;nk$58$fXtZ4GfjDWPoz z{v4Gx9_jK29pKe{>Vh(vK`y`4oxy{ZS^{)v6=g2Vgs%8qPY`>-|RqHp(u|tr)%IJ`!WfVP+RDQVj)LH$Mk}!5tAN_Sm=d- zn_(Amgr|{s4Xyp+fhmpAW{}*FCOM)m_h1}%#AWY0k=&LZwIqn*~H5?k#SnAKkut|+H$93VCQN%cY?kE!Q}8+#G6IL_bKcpfC0~a8jqJgfX70g!DFg~NA;&c?*ZtY37047#3CqR zt0YOGwq1dK*dFgk?5EN53V3-2dlURRka#qF^gep_2KG4AEO#b8W|BLjPYH~Ay9e(S zPXFcK{LA(Hqu*X%EYAGZdpLf;H(sCbdFg(9ksVf{Q*M7-^dZmI3YlE;q7Qn8B zh^RzQQ<6Efh|IqYNWT4bum+W|f+5p}bD8T5;%Eo7p`69>4*5O~l#O~a8#9-^XQ9w7$X6IoP zsjz&9HZh3nS&W$5JYX;g$^|?_nH<8Jre=CRFr^<5(ns74xb?+Q6PnOyNkq73^L3fVY^~~ejB!f zD7LGO2<$7?Hs9C7`GmGP&A3XmgiSkvKIQjD*5VX&qcEGfn}yD(T&43<=czd$Jxfi;TqZDPV~ zF2jl7_b35WVA#)XBK)ck=QjKOgm>i7!O?^UT?j^3(^jlF42f_@#MTKy+158OArRXG zPBmhZ`OarG6iwiglc{(mGN;TSw4n7N(Z7}z@3kI0tt+0E74P*PJgqC9mKEsqrcv76 z6%*0~26kFMUGA_N0Z3hM+SCWXy+N*^0dLIZ?BK-(0`7s@)G4`G|_v`RMLc|lT!7m-`wSSdz;eEZ+? zo##>S&#*i!D=nu7$X_2Y$t?a-h$>l3p$hy{G>UdrU{;Z19!U;h<(6_sR@RZ5E9fe5h5}mEVI?=>zOSJklC_jMNIc1DnJpnEa9zlAVN%F`fXkDv`tL1 zGaBKkP()UsB5PTRjz!3f)g7%Xo|fr9f9~ava%uSP^rvVZeX!3o^woKlePE}owEsZ}Aikn1R+MkQ4N6%UF0lET zOb(=yLqik&T(m$8c018OU=o>$evE>U@oqNNpU#iv+Anhg+OHx&Jx0^c-~%4^JT3?P zWd32dKk4_;>1FP4Ue3%U65QU5BK~F)0BBcCCXD>mgQ*ngg2@*_f(v{!z&WMO{FS;P z!YId}t1!Ld-osHOuIxORMZ&6i8MdQ6AvLrvbb+-tkxFBHxZhKt0ONcEOueZ~mx_4> za7f5zbf;Cy!k@SoxjXk9d*$z7TM)R>B5C1Khd^AigNn?dA;aAadAJ$zaC1Dz5hOpS5=ofpKWEy@ zhpYl^O|&_d8W8<;v5DSgY3=HuAhgxDw<%~R$=_7T(XA!jkVe?;3pN|!1W;8j<&Fk@ z({)1cjqQUfNHT4TT1ZgH#8_O&t)#Yay=vR?cpM>w665nbVmRoem>Oba`wzgaorGJV ztuZuy5e?9|AWTZwru`uK?a4@>6FZx?AezkPt#CGPP|f| zZ3;wUE8J;!$pPOGY;Dj~xZvGkl@t!B0184A#h{3MPNTllbdbuDVPg^>o%b#R+IxRm#Q^7~hI_Ft0*Njru zTeu%->um>IN9^n~xUr*5`jJriZiXUGeh#Eip8qK0>~9vn#0~n$l-E$CebHJP<$_r zy(e;Bv zp9AP43=kjLZzNZO;*BC74p||}0RTe$$(baj-idZ%GLbzr!(F=N$01FkhG= zGQ`M^p>MZh0G){X_2`ma4l6f1v~YqsUdG)$7GDjA&eA5(M*YEuBY4*Ji>4jzy!$l( zO`(TVm~>8bcgEC;>Ut=uhAkQPx5azxq;qKuIf#m|q4z;?@|>M|3+W`*AVEZp8QN!`mqpwM4m1qP8Q&z8TMW{V+Ceb9w89Ua4&6HnV9| zc>6Uw9zr9#z%3qWjzjcY54{Z$hmYC*F-{X%8hsbwu*KS@TsuCbj!#FH5kYx{jiyoI zokid}Xqb3B`_dQ_HFUs7`(41& zsA7xjVNFbX_^Ob9ldvD0M1IF_Hj4ENwQBgH4&I8WU2l58O97ra()I*3o>VJkIoLKH1KGb{h=g^-WQ&DAjSUh#DgaGg_4|1vOkng>>E!! z5@dgP;)xjhLy2c-><=X#uJHjV=_@hu2q4E7?GGiMS7bhepZ&N!zf+#N;)$Gav`?gX z#L>RUCr9M$4<(*&vp?d=$v68%il^j!08;j~;J8uAQ8@cVN-X_x&pdK_R%N;BGAlWS z$m|m>o}XjRdFIjE;|njh-`ZSOdiXaU#&s?SbM1r9Y~W@u_dT_l*m$zjotGcV2$`*VyCqLswRU zYgcU8;TxHnxjM+Ub1bgZmVW1o-T7Rp2Cb71?ut5HUs*DP$0Ek=W!aB$6)TR%@QlH$ zxQ#RA@_D?9t|xf~fgGS=JN);3Ak!;ijM)Fxq9;Nf!kaDK5^&dR@VNJOIPo6C|EE6f znO4k7T74%0ebUV1k?<#Ry6`2G=5T`W1=Q#8`3TDVd!z5){)?}e>3>34#+Ft-^>>wY zOKkzToWXw&RQXE6BY0GuFLun~@ov6Cz`vtnt_x_@ht~O49ADIu$MFT@mA_R8H>8EV`Oy44XzD8!^4bI*;^(i{IUSt= z4qp?Xl=Uv%#`#>rFGIz(aS63vU2yyvK8GFBeiB%G?I4=3<02WQ<9`EQ_)B@5aeXO6 zUoVU#x?LWop)xwz!)`* z%Xg_;UAA(&w5ih>ocHXRZkoNb9L=%83DC5MS!h6Cui?A1^qSrKs9kWZU;f>u27C|a S)I;Z=yv=^UME`%Gf&T$_ldL=d literal 67584 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 MtoJ_p{|gQLFC=)m1ONa4 diff --git a/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml b/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml index 45be391..e775c67 100644 --- a/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml +++ b/MongoDbGenericRepository/lib/net45/MongoDbGenericRepository.xml @@ -4,561 +4,6 @@ MongoDbGenericRepository - - - The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. - Its constructor must be given a connection string and a database name. - - - - - The constructor taking a connection string and a database name. - - The connection string of the MongoDb server. - The name of the database against which you want to perform operations. - - - - The contructor taking a . - - A mongodb context implementing - - - - The contructor taking a . - - A mongodb context implementing - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Asynchronously Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Asynchronously deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - The document filter. - The projection expression. - An optional partition key. - - - - Groups a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. - - The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. - The partition key of your document, if any. - - - - Groups filtered a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. - - The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - - The grouping criteria. - The projected group result. - The partition key of your document, if any. - - - - Asynchronously returns a paginated list of the documents matching the filter condition. - - The type representing a Document. - - The number of documents you want to skip. Default value is 0. - The number of documents you want to take. Default value is 50. - An optional partition key. - - - - Asynchronously returns a paginated list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - - The number of documents you want to skip. Default value is 0. - The number of documents you want to take. Default value is 50. - An optional partition key. - - - - GetAndUpdateOne with filter - - The type representing a Document. - - - - - - - - GetAndUpdateOne with filter - - The type representing a Document. - The type of the primary key for a Document. - - - - - - - - Sets the value of the document Id if it is not set already. - - The document type. - The type of the primary key. - The document. - - - - Sets the value of the document Id if it is not set already. - - The document type. - The document. - The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. @@ -687,6 +132,16 @@ The field selector. The new value of the property field. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Takes a document you want to modify and applies the update you have defined in MongoDb. @@ -695,6 +150,17 @@ The document you want to modify. The update definition for the document. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Takes a document you want to modify and applies the update you have defined in MongoDb. @@ -737,6 +203,17 @@ The document you want to modify. The update definition for the document. + + + For the entity selected by the filter, updates the property field with the given value.. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Updates the property field with the given value update a property field in entities. @@ -748,6 +225,17 @@ The field selector. The new value of the property field. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Updates the property field with the given value update a property field in entities. @@ -1093,12 +581,6 @@ The IMongoDatabase from the official Mongodb driver - - - The private GetCollection method - - - Returns a collection for a document type that has a partition key. @@ -1334,6 +816,618 @@ A LINQ expression filter. An optional partitionKey + + + This attribute allows you to specify of the name of the collection. + Added at commit c117bf2a7fee378f1e02199dea9b2023a7089ee2 by https://github.com/Etchelon + who has included the CollectionName attribute into the repo to give another choice to the user on how + to name their collections. + The attribute takes precedence of course, and if not present the library will fall back to your Pluralize method. + + + + + The name of the collection in which your documents are stored. + + + + + The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. + Its constructor must be given a connection string and a database name. + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Asynchronously deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Groups filtered a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + GetAndUpdateOne with filter + + The type representing a Document. + + + + + + + + GetAndUpdateOne with filter + + The type representing a Document. + The type of the primary key for a Document. + + + + + + + + Sets the value of the document Id if it is not set already. + + The document type. + The type of the primary key. + The document. + + + + Sets the value of the document Id if it is not set already. + + The document type. + The document. + This class represents a basic document that can be stored in MongoDb. @@ -1451,12 +1545,12 @@ The connections string. The name of your database. - + - The private GetCollection method + Extracts the CollectionName attribute from the entity type, if any. The type representing a Document. - + The name of the collection in which the TDocument is stored. @@ -1767,14 +1861,6 @@ The collection partition key. - - - Gets a collections for the type TDocument - - The document type. - The type of the primary key. - - Gets a collections for a potentially partitioned document type. diff --git a/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.dll b/MongoDbGenericRepository/lib/netstandard1.5/MongoDbGenericRepository.dll index ca64ddb8304002d2a1fe301da200e5e2a3103694..43010490b6e088ba0141a45383d135adf2d012cb 100644 GIT binary patch literal 71168 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 @!Mj3$-7Y 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 H7aI5MongoDbGenericRepository - - - The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. - Its constructor must be given a connection string and a database name. - - - - - The constructor taking a connection string and a database name. - - The connection string of the MongoDb server. - The name of the database against which you want to perform operations. - - - - The contructor taking a . - - A mongodb context implementing - - - - The contructor taking a . - - A mongodb context implementing - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Asynchronously Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Asynchronously deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - The document filter. - The projection expression. - An optional partition key. - - - - Groups a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. - - The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. - The partition key of your document, if any. - - - - Groups filtered a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. - - The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - - The grouping criteria. - The projected group result. - The partition key of your document, if any. - - - - Asynchronously returns a paginated list of the documents matching the filter condition. - - The type representing a Document. - - The number of documents you want to skip. Default value is 0. - The number of documents you want to take. Default value is 50. - An optional partition key. - - - - Asynchronously returns a paginated list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - - The number of documents you want to skip. Default value is 0. - The number of documents you want to take. Default value is 50. - An optional partition key. - - - - GetAndUpdateOne with filter - - The type representing a Document. - - - - - - - - GetAndUpdateOne with filter - - The type representing a Document. - The type of the primary key for a Document. - - - - - - - - Sets the value of the document Id if it is not set already. - - The document type. - The type of the primary key. - The document. - - - - Sets the value of the document Id if it is not set already. - - The document type. - The document. - The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. @@ -687,6 +132,16 @@ The field selector. The new value of the property field. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Takes a document you want to modify and applies the update you have defined in MongoDb. @@ -695,6 +150,17 @@ The document you want to modify. The update definition for the document. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Takes a document you want to modify and applies the update you have defined in MongoDb. @@ -737,6 +203,17 @@ The document you want to modify. The update definition for the document. + + + For the entity selected by the filter, updates the property field with the given value.. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Updates the property field with the given value update a property field in entities. @@ -748,6 +225,17 @@ The field selector. The new value of the property field. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Updates the property field with the given value update a property field in entities. @@ -1093,12 +581,6 @@ The IMongoDatabase from the official Mongodb driver - - - The private GetCollection method - - - Returns a collection for a document type that has a partition key. @@ -1334,6 +816,618 @@ A LINQ expression filter. An optional partitionKey + + + This attribute allows you to specify of the name of the collection. + Added at commit c117bf2a7fee378f1e02199dea9b2023a7089ee2 by https://github.com/Etchelon + who has included the CollectionName attribute into the repo to give another choice to the user on how + to name their collections. + The attribute takes precedence of course, and if not present the library will fall back to your Pluralize method. + + + + + The name of the collection in which your documents are stored. + + + + + The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. + Its constructor must be given a connection string and a database name. + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Asynchronously deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Groups filtered a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + GetAndUpdateOne with filter + + The type representing a Document. + + + + + + + + GetAndUpdateOne with filter + + The type representing a Document. + The type of the primary key for a Document. + + + + + + + + Sets the value of the document Id if it is not set already. + + The document type. + The type of the primary key. + The document. + + + + Sets the value of the document Id if it is not set already. + + The document type. + The document. + This class represents a basic document that can be stored in MongoDb. @@ -1451,12 +1545,12 @@ The connections string. The name of your database. - + - The private GetCollection method + Extracts the CollectionName attribute from the entity type, if any. The type representing a Document. - + The name of the collection in which the TDocument is stored. @@ -1767,14 +1861,6 @@ The collection partition key. - - - Gets a collections for the type TDocument - - The document type. - The type of the primary key. - - Gets a collections for a potentially partitioned document type. diff --git a/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.dll b/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.dll index 4388ee5216ecc7e8af86e2ba36257947207f8089..135ebe218f83e34ec86d13c0158d297f0f457f8f 100644 GIT binary patch literal 70656 zcmd3P34ByV5_k7|b7eBQCNnum0s#^jl7JlH5=4$50^v}?r62?nAs8}{1QaKOT;6!2 zf{Tg>DvCEMC@L!A0V*oqpt#_Tt|+^@D+}Mh>h;Wf6B1;<-|p}GqFq)0s_N?Q>f^n6 z^Abj!ccajS5H^(K$A#DoPCxybo}4U#IkDBViDFaSTdg0x`b`SzKmRO(9eVoFMgPmmmHs!mf~3OFeTX}X1jOAP z4MGa_GgS%?#6#_+=oQhO3eSypoxNSaXItuZs;|7Ho^Txc3mcDB^_$f6lPkp3PPKKl z(;;);&`03_@PJ!>`lI)qYAdUQaHPHp^qF(uJ;86Fr5cN$QeN>xebaV;(c?nI z)?}AcBIjwkE$}e930}7rJd6(83i@e!;1Sju_*~#e8Q0wtbxQ55i2-N@ZKrsJ7WN}6 zUZIE6mh9p;t7JB9H}AfHyx!{fvA){?98)};r(YCYD_BgZ+TZ$gA z!=s}t(1UH@<1S2e1lv+=&B>i|1kn?B$L~LPJBl2RU_QWJbQFmzG#z2bb7#ig- z4ld{xnmS4T&}nYFBe$c6J25xfK8vR+dYV?lzzKr# zX$=m=n9(NZ5Hhd9Va#pe;mnO(ma^;*j{tXs2pPFdGIB`@OD^qvPGde(0wZCm#VVf@ z7zHUw9!sMn1}RBF?1@6R+UAbHIZ)Z`!4xQcUTN$fXK)NTmVp?Zrar?_U>$Ow$HGGU z2KyJ>79P*s9-hG5==(&L{o(V#9U($S-@QiPNfFa`OctL*iMGJ`uyu56kW%4X=+FX~ z!$Li_uhHY_gudE2zjUTG8;cX92PaV{VlvQNRAb&S7P@|L4kn{6<=_J5w(u0@_V85Z ziMDV#3q~@gvFr~|2X}-B8Ogw`(54_oBpH-zY6pvn+o|BHdbpCgEqoz!dw2$Ov@??h zqn#?2{oz^Qju0WE9b6!&9a5O>IQ}ozi>>Y=#K=z%R)d{%y+3GOrxKqu=KOZoc>8aPd%r!2eExQ zrwh1WdiYZ2ws45KJ>0Q+EW*XmorajhoyU%6Jdi@jD;+}*7EpIob>_ltpC3^;f@ zS}VXfb$zX$`3`o~!+&9J3$JEwEBQ7ao;v$x_bBp=C<&Q%#FC)SoVis z0(XQ68F7n@xTJ`QOZmd3gZuk3*VV(XFgN0DXW1Wq72FXbWW?)e#3O|zp0W0G5U*|r zERELwYf$mpe;vXx#~Yw^Z<1~iSpuC9GH@D5cqd?F?PFmSHna9SQ-u=v^2ZNz?c?*8 z`YhBR#@!TcH|t{8zKpu{B@en|+RZwwN6Sa1|Le8i)Ou;O_KnXGEmi(^pV?Med7g#r>2Cp5lMV+!p?b zxjp&$rBN;qRE+!{0ME;{U+1KYR$>5h7&7?`6a%g(d!}=BM|6m><(0+2;J) zjgN_Onmy)IqK}>w6ygzEAMRgdKCs}`d<<6gWA58hVUB#xG$L4TxPm`pj5d3d5sfu> z9%8mpIXw(#%IPo6ZQ);;+rvkg
HECl`m7XFQ8fB1KBM~IM-+%vfI4WtPC3j~uF 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 Fe*oJatHl5S literal 67584 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 SJcLjE!4=kf2mSwr2L1;uFO1Ou diff --git a/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.xml b/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.xml index 45be391..e775c67 100644 --- a/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.xml +++ b/MongoDbGenericRepository/lib/netstandard2.0/MongoDbGenericRepository.xml @@ -4,561 +4,6 @@ MongoDbGenericRepository - - - The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. - Its constructor must be given a connection string and a database name. - - - - - The constructor taking a connection string and a database name. - - The connection string of the MongoDb server. - The name of the database against which you want to perform operations. - - - - The contructor taking a . - - A mongodb context implementing - - - - The contructor taking a . - - A mongodb context implementing - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The documents you want to add. - - - - Asynchronously adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Adds a document to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to add. - - - - Asynchronously adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Adds a list of documents to the collection. - Populates the Id and AddedAtUtc fields if necessary. - - The type representing a Document. - The type of the primary key for a Document. - The documents you want to add. - - - - Asynchronously Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The document you want to modify. - The update definition for the document. - - - - Asynchronously Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Updates a document. - - The type representing a Document. - The type of the primary key for a Document. - The document with the modifications you want to persist. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Takes a document you want to modify and applies the update you have defined in MongoDb. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to modify. - The update definition for the document. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document you want to modify. - The field selector. - The new value of the property field. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Updates the property field with the given value update a property field in entities. - - The type representing a Document. - The type of the primary key for a Document. - The type of the field. - The document filter. - The field selector. - The new value of the property field. - The value of the partition key. - - - - Asynchronously deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Deletes a document. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - The document you want to delete. - The number of documents deleted. - - - - Deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a document matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes a list of documents. - - The type representing a Document. - The type of the primary key for a Document. - The list of documents to delete. - The number of documents deleted. - - - - Deletes the documents matching the condition of the LINQ expression filter. - - The type representing a Document. - The type of the primary key for a Document. - A LINQ expression filter. - An optional partition key. - The number of documents deleted. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Returns a projected document matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type representing the model you want to project to. - - The projection expression. - An optional partition key. - - - - Asynchronously returns a list of projected documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - The type representing the model you want to project to. - The document filter. - The projection expression. - An optional partition key. - - - - Groups a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. - - The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - The grouping criteria. - The projected group result. - The partition key of your document, if any. - - - - Groups filtered a collection of documents given a grouping criteria, - and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. - - The type representing a Document. - The type of the grouping criteria. - The type of the projected group. - - The grouping criteria. - The projected group result. - The partition key of your document, if any. - - - - Asynchronously returns a paginated list of the documents matching the filter condition. - - The type representing a Document. - - The number of documents you want to skip. Default value is 0. - The number of documents you want to take. Default value is 50. - An optional partition key. - - - - Asynchronously returns a paginated list of the documents matching the filter condition. - - The type representing a Document. - The type of the primary key for a Document. - - The number of documents you want to skip. Default value is 0. - The number of documents you want to take. Default value is 50. - An optional partition key. - - - - GetAndUpdateOne with filter - - The type representing a Document. - - - - - - - - GetAndUpdateOne with filter - - The type representing a Document. - The type of the primary key for a Document. - - - - - - - - Sets the value of the document Id if it is not set already. - - The document type. - The type of the primary key. - The document. - - - - Sets the value of the document Id if it is not set already. - - The document type. - The document. - The IBaseMongoRepository exposes the CRUD functionality of the BaseMongoRepository. @@ -687,6 +132,16 @@ The field selector. The new value of the property field. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Takes a document you want to modify and applies the update you have defined in MongoDb. @@ -695,6 +150,17 @@ The document you want to modify. The update definition for the document. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Takes a document you want to modify and applies the update you have defined in MongoDb. @@ -737,6 +203,17 @@ The document you want to modify. The update definition for the document. + + + For the entity selected by the filter, updates the property field with the given value.. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Updates the property field with the given value update a property field in entities. @@ -748,6 +225,17 @@ The field selector. The new value of the property field. + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + Updates the property field with the given value update a property field in entities. @@ -1093,12 +581,6 @@ The IMongoDatabase from the official Mongodb driver - - - The private GetCollection method - - - Returns a collection for a document type that has a partition key. @@ -1334,6 +816,618 @@ A LINQ expression filter. An optional partitionKey + + + This attribute allows you to specify of the name of the collection. + Added at commit c117bf2a7fee378f1e02199dea9b2023a7089ee2 by https://github.com/Etchelon + who has included the CollectionName attribute into the repo to give another choice to the user on how + to name their collections. + The attribute takes precedence of course, and if not present the library will fall back to your Pluralize method. + + + + + The name of the collection in which your documents are stored. + + + + + The base Repository, it is meant to be inherited from by your custom custom MongoRepository implementation. + Its constructor must be given a connection string and a database name. + + + + + The constructor taking a connection string and a database name. + + The connection string of the MongoDb server. + The name of the database against which you want to perform operations. + + + + The contructor taking a . + + A mongodb context implementing + + + + The contructor taking a . + + A mongodb context implementing + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The documents you want to add. + + + + Asynchronously adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Adds a document to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to add. + + + + Asynchronously adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Adds a list of documents to the collection. + Populates the Id and AddedAtUtc fields if necessary. + + The type representing a Document. + The type of the primary key for a Document. + The documents you want to add. + + + + Asynchronously Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The document you want to modify. + The update definition for the document. + + + + Asynchronously Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Updates a document. + + The type representing a Document. + The type of the primary key for a Document. + The document with the modifications you want to persist. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Takes a document you want to modify and applies the update you have defined in MongoDb. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to modify. + The update definition for the document. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document you want to modify. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value update a property field in entities. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + The value of the partition key. + + + + For the entity selected by the filter, updates the property field with the given value. + + The type representing a Document. + The type of the primary key for a Document. + The type of the field. + The document filter. + The field selector. + The new value of the property field. + + + + Asynchronously deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document. + + The type representing a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Deletes a document. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + The document you want to delete. + The number of documents deleted. + + + + Deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a document matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes a list of documents. + + The type representing a Document. + The type of the primary key for a Document. + The list of documents to delete. + The number of documents deleted. + + + + Deletes the documents matching the condition of the LINQ expression filter. + + The type representing a Document. + The type of the primary key for a Document. + A LINQ expression filter. + An optional partition key. + The number of documents deleted. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Returns a projected document matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type representing the model you want to project to. + + The projection expression. + An optional partition key. + + + + Asynchronously returns a list of projected documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + The type representing the model you want to project to. + The document filter. + The projection expression. + An optional partition key. + + + + Groups a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Groups filtered a collection of documents given a grouping criteria, + and returns a dictionary of listed document groups with keys having the different values of the grouping criteria. + + The type representing a Document. + The type of the grouping criteria. + The type of the projected group. + + The grouping criteria. + The projected group result. + The partition key of your document, if any. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + Asynchronously returns a paginated list of the documents matching the filter condition. + + The type representing a Document. + The type of the primary key for a Document. + + The number of documents you want to skip. Default value is 0. + The number of documents you want to take. Default value is 50. + An optional partition key. + + + + GetAndUpdateOne with filter + + The type representing a Document. + + + + + + + + GetAndUpdateOne with filter + + The type representing a Document. + The type of the primary key for a Document. + + + + + + + + Sets the value of the document Id if it is not set already. + + The document type. + The type of the primary key. + The document. + + + + Sets the value of the document Id if it is not set already. + + The document type. + The document. + This class represents a basic document that can be stored in MongoDb. @@ -1451,12 +1545,12 @@ The connections string. The name of your database. - + - The private GetCollection method + Extracts the CollectionName attribute from the entity type, if any. The type representing a Document. - + The name of the collection in which the TDocument is stored. @@ -1767,14 +1861,6 @@ The collection partition key. - - - Gets a collections for the type TDocument - - The document type. - The type of the primary key. - - Gets a collections for a potentially partitioned document type.