HTML5¼¼Êõ

ABPʹÓü°¿ò¼Ü½âÎöϵÁÐ - [Unit of Work part.2-¿ò¼ÜʵÏÖ] - An.Cup.Of.Coffee(3)

×ÖºÅ+ ×÷ÕߣºH5Ö®¼Ò À´Ô´£ºH5Ö®¼Ò 2015-10-31 12:01 ÎÒÒªÆÀÂÛ( )

ÔÚ֮ǰµÄBeginʵÏÖÖУ¬ÎÒÃÇ¿´µ½£¬Æä·µ»ØÂ·ÏßÓÐÁ½¸ö£¬Ò»¸ö·µ»ØÁËInnerUnitOfWorkCompleteHandle¶ÔÏó£¬ÁíÒ»¸ö·µ»ØÁËIUnitOfWorkʵÏÖ¶ÔÏó¡£IUnitOfWorkÉÔºóÏêϸ½âÎö£¬ÈÃÎÒÃÇÏÈÀ´½âÎöInnerUnitOfWorkCompleteHandle £º

ÔÚ֮ǰµÄBeginʵÏÖÖУ¬ÎÒÃÇ¿´µ½£¬Æä·µ»ØÂ·ÏßÓÐÁ½¸ö£¬Ò»¸ö·µ»ØÁËInnerUnitOfWorkCompleteHandle¶ÔÏó£¬ÁíÒ»¸ö·µ»ØÁËIUnitOfWorkʵÏÖ¶ÔÏó¡£IUnitOfWorkÉÔºóÏêϸ½âÎö£¬ÈÃÎÒÃÇÏÈÀ´½âÎöInnerUnitOfWorkCompleteHandle £º

internal class InnerUnitOfWorkCompleteHandle : IUnitOfWorkCompleteHandle { DidNotCallCompleteMethodExceptionMessage = ; _isCompleteCalled; _isDisposed; public void Complete() { _isCompleteCalled = true; } public async Task CompleteAsync() { _isCompleteCalled = true; } public void Dispose() { if (_isDisposed) { return; } _isDisposed = true; if (!_isCompleteCalled) { if (HasException()) { return; } throw new AbpException(DidNotCallCompleteMethodExceptionMessage); } } HasException() { try { return Marshal.GetExceptionCode() != 0; } catch (Exception) { return false; } } }

ÎÒÃÇ¿ÉÒÔ¿´µ½£¬CompleteºÍCompleteAsyncÀïÃæ£¬¶¼Ö»ÊǼòµ¥µÄ½«_isCompleteCalledÉèÖÃΪtrue£¬ÔÚDispose·½·¨ÖУ¬Ò²½ö½öÖ»ÊÇÅжÏÊÇ·ñÒѾ­dispose¹ý¡¢ÊÇ·ñÍê³É¡¢ÊÇ·ñÓÐÒì³££¬Ã»Óиü¶àµÄ¶¯×÷¡£ÕâÑù´ó¼Ò»á²»»áÓÐÒ»¸öÒÉÎÊ“Õâ¸ö¹¤×÷µ¥ÔªµÄÍê³ÉºÍÊͷʤ×÷ÀïûÓоßÌåµÄÍê³É²Ù×÷£¬Ôõô¾ÍËãÍê³É¹¤×÷µ¥ÔªÁË£¿”£¬Õâʱ£¬ÈÃÎÒÃǽáºÏʹÓõ½InnerUnitOfWorkCompleteHandleµÄµØ·½À´¿´£º

if (options.Scope == TransactionScopeOption.Required && _currentUnitOfWorkProvider.Current != null) { return new InnerUnitOfWorkCompleteHandle(); }

Õâ¸öÅжϣ¬´ú±íÁ˵±Ç°ÒѾ­´æÔÚ¹¤×÷µ¥Ôª£¬ËùÒÔÕâ¸ö¾ÍÊÇÓÃÓÚ¹¤×÷µ¥ÔªÇ¶Ìס£ÄÚ²¿µÄ¹¤×÷µ¥ÔªÔÚÌá½»ºÍÊÍ·Åʱ£¬²»ÐèÒª×öʵ¼ÊµÄÌá½»ºÍÊÍ·Å£¬Ö»ÐèÒª±£Ö¤Ã»ÓÐÒì³£Å׳ö£¬È»ºó×îÍâ²ã¹¤×÷µ¥ÔªÔÙ½øÐÐʵ¼ÊµÄÌá½»ºÍÊÍ·Å¡£ÕâÒ²¾Í˵Ã÷£¬ÔÚBegin·½·¨ÖеÄÁíÒ»Ìõ·Ïߣ¬·µ»ØIUnitOfWorkʵÏÖ¶ÔÏó²ÅÊÇ×îÍâ²ãµÄÊÂÎñ¶ÔÏó¡£

 

IUnitOfWork

public interface IUnitOfWork : IActiveUnitOfWork, IUnitOfWorkCompleteHandle { Id { get; } //Íâ²ã¹¤×÷µ¥Ôª IUnitOfWork Outer { get; set; } Begin(UnitOfWorkOptions options); }

IUnitOfWork³ýÁ˼̳ÐÁËIUnitOfWorkCompleteHandle½Ó¿Ú£¬ÓµÓÐÁËComplete·½·¨Í⣬»¹¼Ì³ÐÁËIActiveUnitOfWork½Ó¿Ú£º

public interface IActiveUnitOfWork { EventHandler Completed; event EventHandler<UnitOfWorkFailedEventArgs> Failed; event EventHandler Disposed; //¹¤×÷µ¥ÔªÉèÖà UnitOfWorkOptions Options { get; } //Êý¾Ý¹ýÂËÅäÖà IReadOnlyList<DataFilterConfiguration> Filters { get; } bool IsDisposed { get; } void SaveChanges(); Task SaveChangesAsync(); IDisposable DisableFilter(params string[] filterNames); IDisposable EnableFilter(params string[] filterNames); bool IsFilterEnabled(string filterName); IDisposable SetFilterParameter(string filterName, string parameterName, object value); }

Õâ¸ö½Ó¿ÚÖаüº¬Á˺ܶàFilterÏà¹ØµÄÊôÐÔÓë·½·¨£¬¶¼ÊÇЩÊý¾Ý¹ýÂËÏà¹ØµÄ£¬ÕâÀï²»¶ÔÆä½øÐнéÉÜ£¬ËùÒÔÕâ¸ö½Ó¿ÚÀÖ÷Òª°üº¬ÁËÈý¸öʼþ£¨Completed¡¢Failed¡¢Disposed£©£¬¹¤×÷µ¥ÔªÉèÖã¨Options£©£¬IsDisposedÒÔ¼°Í¬²½Òì²½µÄSaveChanges¡£

³ýÁËIUnitOfWork½Ó¿Ú£¬ABP»¹ÌṩÁËÒ»¸öʵÏÖIUnitOfWork½Ó¿ÚµÄ³éÏó»ùÀàUnitOfWorkBase£¬UnitOfWorkBaseµÄÖ÷ҪĿµÄ£¬ÊÇΪ¿ª·¢ÈËÔ±´¦ÀíһЩǰÖᢺóÖù¤×÷ºÍÒì³£´¦Àí£¬ËùÒÔUnitOfWorkBaseʵÏÖÁ˲¿·Ö·½·¨£¬²¢ÌṩÁËһЩ³éÏó·½·¨£¬ÔÚʵÏֵIJ¿·ÖÖÐ×öºÃǰºóÖù¤×÷£¬È»ºóµ÷ÓóéÏó·½·¨£¬½«Ö÷ҪʵÏÖ½»¸ø×ÓÀ࣬²¢¶ÔÆä½øÐÐÒì³£´¦Àí£¬ÏÂÃæÒÔBeginʵÏÖÓëCompleteʵÏÖΪÀý£º

public void Begin(UnitOfWorkOptions options) { if (options == null) { ); } //·ÀÖ¹Begin±»¶à´Îµ÷Óà (); Options = options; //¹ýÂËÅäÖà SetFilters(options.FilterOverrides); //³éÏó·½·¨£¬×ÓÀàʵÏÖ BeginUow(); } public void Complete() { //·ÀÖ¹Complete±»¶à´Îµ÷Óà (); try { //³éÏó·½·¨£¬×ÓÀàʵÏÖ CompleteUow(); _succeed = true; OnCompleted(); } catch (Exception ex) { _exception = ex; throw; } }

¡¡

1.±¾Õ¾×ñÑ­ÐÐÒµ¹æ·¶£¬ÈκÎ×ªÔØµÄ¸å¼þ¶¼»áÃ÷È·±ê×¢×÷ÕߺÍÀ´Ô´£»2.±¾Õ¾µÄÔ­´´ÎÄÕ£¬Çë×ªÔØÊ±Îñ±Ø×¢Ã÷ÎÄÕÂ×÷ÕߺÍÀ´Ô´£¬²»×ðÖØÔ­´´µÄÐÐΪÎÒÃǽ«×·¾¿ÔðÈΣ»3.×÷ÕßͶ¸å¿ÉÄܻᾭÎÒÃDZ༭Ð޸Ļò²¹³ä¡£

Ïà¹ØÎÄÕÂ
  • Dora.Interception: Ò»¸öΪ.NET Core¶ÈÉí¶¨ÖÆµÄAOP¿ò¼Ü - Artech

    Dora.Interception: Ò»¸öΪ.NET Core¶ÈÉí¶¨ÖÆµÄAOP¿ò¼Ü - Artech

    2017-05-02 11:00

  • ¡¾Vue ÈëÃÅ¡¿Ê¹Óà Vue2 ¿ª·¢Ò»¸öչʾÏîÄ¿ÁбíµÄÓ¦Óà - zhangjk

    ¡¾Vue ÈëÃÅ¡¿Ê¹Óà Vue2 ¿ª·¢Ò»¸öչʾÏîÄ¿ÁбíµÄÓ¦Óà - zhangjk

    2017-04-30 16:00

  • ¶ÔÓÚBootstrapµÄ½éÉÜÒÔ¼°ÈçºÎʹÓà - novai-L

    ¶ÔÓÚBootstrapµÄ½éÉÜÒÔ¼°ÈçºÎʹÓà - novai-L

    2017-04-29 09:00

  • ÔÚDelphiÏÂʹÓÃѸÀ×APlayer×é¼þ½øÐÐÃâ×¢²á¿ª·¢ - DelphiÁ¦Á¿

    ÔÚDelphiÏÂʹÓÃѸÀ×APlayer×é¼þ½øÐÐÃâ×¢²á¿ª·¢ - DelphiÁ¦Á¿

    2017-04-28 15:00

ÍøÓѵãÆÀ
½