From 6c6b1b080a059dc2eefa7dc27efb8f1688b8a6fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 25 Sep 2017 20:55:34 +0300 Subject: [PATCH] Refactored UOW. --- src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll | Bin 15872 -> 15872 bytes .../Volo/Abp/Uow/IUnitOfWorkManager.cs | 5 ++- .../Volo/Abp/Uow/UnitOfWorkManager.cs | 36 ++++++++++++------ .../Abp/Uow/UnitOfWorkManagerExtensions.cs | 21 +--------- .../Volo/Abp/Uow/UnitOfWorkStartOptions.cs | 6 --- .../Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs | 2 +- 6 files changed, 32 insertions(+), 38 deletions(-) diff --git a/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll b/src/AbpDesk/Web_PlugIns/AbpDesk.MongoBlog.dll index 14344b9ee16c8c7bb31dccbc2fdee66d6b647980..484411d11ecce57e134ddd62f903e5a95be1a7ff 100644 GIT binary patch delta 1360 zcmZvcTTEP46o&t`_F-;tW`@CH&8RJfDD*-g4pgKUMjDhBY>`@vHriOIA(~i29~>c_ znUW94o0v2$YBep1^^%&@wqDlW%$wcG{^no* z{?|Td_MAD1oF=^19=*yerYK=D8Ao`7SZR$MeENhV6V=bdk~P4WHwm#QB}(*@d0fFT(xa--OZJ z+v0D+J>eb0t*}%z0u)q*AUvRUtd#4bZ+XW1s3Np4RhZr7FI9{&Q)aNjS1HwqU?Dg_9-mt@T zES=+zQ+ze$bAi8>%6Q6th8n5bYNZma^S4t3pHeqP=~c^x8ZH+;MEW?|DCSGj9DY^( z)X2v?M`#!vI7(5@cu&v<(-kwxVcg}jlob6X4H>7CKX%X17Mzluo8-7$act4|MKPZ9 z-!wOIi>6F;Eyi4KUW<=hxtwI3DdR~y$aA_4?{mt(nuqv1s^AiIQZ?_yn74)ZV20eB zhe_%Xea+706i@l%;tYEFgg5POn&1iF0Q=#=D91x+MutOZ5thpXd`6X{0Mo)S7KFvP zAzWklgnZ|6)EZrHxD76=9IdDjzKqv}`;ZX6fk9!HkRiACYBuQw5&#O7UT3Y-J?Rzk$<2ImOP^+Dy4wi ze$7wpQQ>jp9CmBx2hX_hJf{>p|K@iD+UQN{qEmE1M z#5o<>-ZH|ydAc&oTF4mTw)=Ps_wlCw?>XBFI+qnuE2`-QnT=?s7`~?CIFOzxs4ocq z5#E7A+ncwJkJd!o?|e9!e)#bR$>#-!5~)y%rIfU~o9X(sQkM0c!~HMMc0TX-`JV4N z@4Iu}_f2*syWV=uO22&c%vfI+(^ki)YBP_iQhE@vYJdT(lTHNGO3xFmoAzz#b>cN; z1}vW^@g=t=d({lD#4Z0NCirxE*v*i3gy_KT)1eeDMa&{ojv)H;8x{Eahc9f`D~SS2J<6J zv*f`_}|@6M{;Aw?H$h5{0QxJ=FKb{f97&=l_eYh6O?Fyjg& zC{am;91g6ZN*=c#rAAt1Jx%3U9%!d(oT391qZceUR&$l`KGNIKMsa_Vrg2lfL5=*b z_e~lE2aiyUr+n|zIx{P7l7n(WqSG%FVJ}?gZBB=b|`I2YxXR z@jH#1=rWAD-MkFP+|8eZq&KqU|Gx3q%G(MeI>f>GZleh%l!&G|S@ z9ir!KKM(VG;Gj7D-b2D0_5m8>F@G-y;Kc|hLU;n7a|oM-Rq_IVqN)(agfN1u!ZQ3U zTx$3*ZirrMbc10NTvioYutK;EJB95?2zQ}RxKHx+=)n=I9=-V5YQQV_&T2;nKUpa_ z;-nHdi;GqdKE-9%u(5`XGimgs(X&Q>pQFxSGnz;*L8KjJbZL&-i5VR;quY&68V(sw z7|v2cF9FsZGMq4+HH6ZBiDA9rcEjX?W1W=IYMhZ1|B>dYh+Xmpx?#yXTCRo^@OMD- zLwiJ+Hcq!kJ3n|&3D5G7V&~t&9l>X57rjI$=n`F_4czAJ3zZeU&4=}0#QaM1RkyTr zGW68uH237|$_#5EEzNCr@n-MhjsM?sn!=q$CDei_JtMsl%@oHprLiY-KHLy4xUl=9 z>$|^seq;YMFS(a|UQj4G97<89w&H@72`-O%t(IGdPB@Q8s|)Izi?6w2 UE%m97U%c~M(C*LlMfZFE1F1bS>;M1& diff --git a/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWorkManager.cs b/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWorkManager.cs index 493a5b1c78..1fc871dd3e 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWorkManager.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/IUnitOfWorkManager.cs @@ -8,7 +8,10 @@ namespace Volo.Abp.Uow IUnitOfWork Current { get; } [NotNull] - IBasicUnitOfWork Begin([NotNull] UnitOfWorkStartOptions options); + IBasicUnitOfWork Begin([NotNull] UnitOfWorkStartOptions options, bool requiresNew = false); + + [NotNull] + IBasicUnitOfWork Reserve([NotNull] string reservationName, bool requiresNew = false); void BeginReserved([NotNull] string reservationName, [NotNull] UnitOfWorkStartOptions options); diff --git a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs index c4ece92369..ccf3d6e8b1 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManager.cs @@ -1,4 +1,5 @@ using System; +using JetBrains.Annotations; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.DependencyInjection; @@ -17,22 +18,38 @@ namespace Volo.Abp.Uow _ambientUnitOfWork = ambientUnitOfWork; } - public IBasicUnitOfWork Begin(UnitOfWorkStartOptions options) + public IBasicUnitOfWork Begin(UnitOfWorkStartOptions options, bool requiresNew = false) { Check.NotNull(options, nameof(options)); - if (!options.RequiresNew && _ambientUnitOfWork.UnitOfWork != null && !_ambientUnitOfWork.UnitOfWork.IsReserved) + if (!requiresNew && _ambientUnitOfWork.UnitOfWork != null && !_ambientUnitOfWork.UnitOfWork.IsReserved) { return new ChildUnitOfWork(_ambientUnitOfWork.UnitOfWork); } - if (_ambientUnitOfWork.UnitOfWork != null) + var unitOfWork = CreateNewUnitOfWork(); + unitOfWork.SetOptions(options); + + return unitOfWork; + } + + public IBasicUnitOfWork Reserve(string reservationName, bool requiresNew = false) + { + Check.NotNull(reservationName, nameof(reservationName)); + + if (!requiresNew && + _ambientUnitOfWork.UnitOfWork != null && + _ambientUnitOfWork.UnitOfWork.IsReservedFor(reservationName)) { - //Requires new because there is already a current UOW but it's reserved - options.RequiresNew = true; + return new ChildUnitOfWork(_ambientUnitOfWork.UnitOfWork); } - return CreateUnitOfWork(options); + var unitOfWork = CreateNewUnitOfWork(); + + unitOfWork.IsReserved = true; + unitOfWork.ReservationName = reservationName; + + return unitOfWork; } public void BeginReserved(string reservationName, UnitOfWorkStartOptions options) @@ -62,6 +79,7 @@ namespace Volo.Abp.Uow uow.IsReserved = false; uow.SetOptions(options); + return true; } @@ -78,10 +96,9 @@ namespace Volo.Abp.Uow return uow; } - private IUnitOfWork CreateUnitOfWork(UnitOfWorkStartOptions options) + private IUnitOfWork CreateNewUnitOfWork() { var scope = _serviceProvider.CreateScope(); - try { var outerUow = _ambientUnitOfWork.UnitOfWork; @@ -89,9 +106,6 @@ namespace Volo.Abp.Uow var unitOfWork = scope.ServiceProvider.GetRequiredService(); unitOfWork.SetOuter(outerUow); - unitOfWork.IsReserved = options.ReservationName != null; - unitOfWork.ReservationName = options.ReservationName; - unitOfWork.SetOptions(options); //TODO: Should not call this for reservation? _ambientUnitOfWork.SetUnitOfWork(unitOfWork); diff --git a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs index 5be61ae8ae..8e4aaae90d 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkManagerExtensions.cs @@ -5,28 +5,11 @@ namespace Volo.Abp.Uow public static class UnitOfWorkManagerExtensions { [NotNull] - public static IBasicUnitOfWork Begin([NotNull] this IUnitOfWorkManager unitOfWorkManager) + public static IBasicUnitOfWork Begin([NotNull] this IUnitOfWorkManager unitOfWorkManager, bool requiresNew = false) { Check.NotNull(unitOfWorkManager, nameof(unitOfWorkManager)); - return unitOfWorkManager.Begin(new UnitOfWorkStartOptions()); - } - - [NotNull] - public static IBasicUnitOfWork BeginNew([NotNull] this IUnitOfWorkManager unitOfWorkManager) - { - Check.NotNull(unitOfWorkManager, nameof(unitOfWorkManager)); - - return unitOfWorkManager.Begin(new UnitOfWorkStartOptions {RequiresNew = true}); - } - - [NotNull] - public static IBasicUnitOfWork Reserve([NotNull] this IUnitOfWorkManager unitOfWorkManager, [NotNull] string reservationName) - { - Check.NotNull(unitOfWorkManager, nameof(unitOfWorkManager)); - Check.NotNull(reservationName, nameof(reservationName)); - - return unitOfWorkManager.Begin(new UnitOfWorkStartOptions { ReservationName = reservationName }); + return unitOfWorkManager.Begin(new UnitOfWorkStartOptions(), requiresNew); } public static void BeginReserved([NotNull] this IUnitOfWorkManager unitOfWorkManager, [NotNull] string reservationName) diff --git a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkStartOptions.cs b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkStartOptions.cs index 6a227389e1..b5799df7ff 100644 --- a/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkStartOptions.cs +++ b/src/Volo.Abp/Volo/Abp/Uow/UnitOfWorkStartOptions.cs @@ -5,12 +5,6 @@ namespace Volo.Abp.Uow { public class UnitOfWorkStartOptions { - //Revise this since Begin/BeginReserved accepts different options and that can make confusion! - - public bool RequiresNew { get; set; } - - public string ReservationName { get; set; } - public bool? IsTransactional { get; set; } public IsolationLevel? IsolationLevel { get; set; } diff --git a/test/Volo.Abp.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs b/test/Volo.Abp.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs index 5c4b568b4a..e3f2e9a0c0 100644 --- a/test/Volo.Abp.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs +++ b/test/Volo.Abp.Tests/Volo/Abp/Uow/UnitOfWork_Nested_Tests.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Uow _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.ShouldBe(uow1); - using (var uow2 = _unitOfWorkManager.BeginNew()) + using (var uow2 = _unitOfWorkManager.Begin(requiresNew: true)) { _unitOfWorkManager.Current.ShouldNotBeNull(); _unitOfWorkManager.Current.Id.ShouldNotBe(uow1.Id);