HTML5¼¼Êõ

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

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

private void PreventMultipleBegin(){ if (_isBeginCalledBefore){ AbpException( );}_isBeginCalledBefore = true ;} private void PreventMultipleComplete(){ if (_isCompleteCalledBefore){ AbpException( );}

private void PreventMultipleBegin() { if (_isBeginCalledBefore) {AbpException(); } _isBeginCalledBefore = true; }

private void PreventMultipleComplete() { if (_isCompleteCalledBefore) {AbpException(); } _isCompleteCalledBefore = true; }

UnitOfWorkBaseµÄÆäËûʵÏÖÓëÉÏÃæµÄÀàËÆ£¨·ÇUnit of WorkÏà¹ØÄÚÈÝÂÔÈ¥£©£¬±ã²»È«Ìù³ö¡£µ«ÊÇÉÏÃæµÄ´úÂ룬´ó¼ÒÓз¢ÏÖÒ»¸öÎÊÌâÂ𣿠¾ÍÊÇÄÇЩPreventMultiple…·½·¨µÄʵÏÖ£¬ÓÃÀ´·ÀÖ¹¶à´ÎBegin¡¢CompleteµÈ¡£ÕâЩ·½·¨µÄʵÏÖ£¬ÔÚµ¥Ïß³ÌÏÂÊÇûÓÐÎÊÌâµÄ£¬µ«ÊÇÀïÃæ²¢Ã»ÓмÓËø£¬ËùÒÔ²»ÊÊÓÃÓÚ¶àÏ̡߳£ÕâÊÇ×÷ÕßµÄBUGÂ𣿠Ȼ¶ø£¬ÕâÈ´²¢²»ÊÇBUG£¬¶øÊÇÉè¼ÆÈç´Ë£¬ÎªºÎÄØ£¿ÒòΪÔÚÉè¼ÆÉÏ£¬Ò»¸öÏ̹߳²ÓÃÒ»¸ö¹¤×÷µ¥Ôª£¬Ò²¾Í²»´æÔÚ¶àÏß³ÌÁË¡£¹ØÓÚÕⲿ·ÖÄÚÈÝ£¬ºóÐø½«»á½éÉÜ¡£

IUnitOfWorkManagerÄ¿µÄÊÇÌṩһ¸ö¼ò½àµÄIUnitOfWork¹ÜÀí¶ÔÏ󣬶øIUnitOfWorkÔòÌṩÁËÕû¸ö¹¤×÷µ¥ÔªÐèÒªµÄËùÓпØÖÆ£¨Begin¡¢SaveChanges¡¢Complete¡¢Dispose£©¡£¶ø¾ßÌåÓ¦¸ÃÈçºÎ±£Ö¤Ò»¸öÏ̹߳²ÓÃÒ»¸ö¹¤×÷µ¥Ôª£¬ÈçºÎ»ñÈ¡µ±Ç°µÄ¹¤×÷µ¥Ôª£¬ÔòÓÉICurrentUnitOfWorkProvider½øÐйܿأ¬ÕýÈçÔÚ½âÎöUnitOfWorkManagerʱ£¬ËµÃ÷ÁËËüµÄCurrentʵ¼ÊÉϾÍÊǵ÷ÓÃICurrentUnitOfWorkProviderʵÏÖ¶ÔÏóµÄCurrentÊôÐÔ¡£

 

ICurrentUnitOfWorkProvider

public interface ICurrentUnitOfWorkProvider { IUnitOfWork Current { get; set; } }

ICurrentUnitOfWorkProvider½ö½öÖ»ÉùÃ÷ÁËÒ»¸öCurrentÊôÐÔ£¬ÄÇÃ´ÖØµãÈÃÎÒÃÇÀ´¿´¿´CurrentÔÚʵÏÖÀࣨCallContextCurrentUnitOfWorkProvider£©ÖÐÊÇÈçºÎдµÄ°É£º

[DoNotWire] public IUnitOfWork Current { get { return GetCurrentUow(Logger); } set { SetCurrentUow(value, Logger); } }

ÉÏÃæ±ê×¢µÄDoNotWireÊÇΪÁ˲»ÈÃIoC½øÐÐÊôÐÔ×¢È룬CurrentÄÚ²¿·Ö±ðµ÷ÓÃÁËGetCurrentUowºÍSetCurrentUow£¬ÒªÈ¡Öµ£¬ÏÈÒªÉèÖµ£¬ÈÃÎÒÀ´ÏÈ¿´¿´set°É£º

SetCurrentUow(IUnitOfWork value, ILogger logger) { if (value == null) {//Èç¹ûÔÚsetµÄʱºòÉèÖÃΪnull£¬±ã±íʾҪÍ˳öµ±Ç°¹¤×÷µ¥Ôª (logger); return; } unitOfWorkKey = CallContext.LogicalGetData(ContextKey) as string; if (unitOfWorkKey != null) { IUnitOfWork outer; if (UnitOfWorkDictionary.TryGetValue(unitOfWorkKey, out outer)) { if (outer == value) { logger.Warn(); return; } //µ½ÕâÀïÒ²¾Í±íʾµ±Ç°´æÔÚ¹¤×÷µ¥Ôª£¬ÄÇôÔÙ´ÎÉèÖù¤×÷µ¥Ôª£¬²»ÊÇÌæ»»µôµ±Ç°µÄ¹¤×÷µ¥Ôª¶øÊǽ«µ±Ç°¹¤×÷µ¥Ôª×÷Ϊ±¾´ÎÉèÖõŤ×÷µ¥ÔªµÄÍâ²ã¹¤×÷µ¥Ôª value.Outer = outer; } } unitOfWorkKey = value.Id; if (!UnitOfWorkDictionary.TryAdd(unitOfWorkKey, value)) {AbpException(); } //ÉèÖõ±Ç°Ï̵߳Ť×÷µ¥Ôªkey CallContext.LogicalSetData(ContextKey, unitOfWorkKey); }

ExitFromCurrentUowScope(ILogger logger) { //ContextKeyΪһ¸ö³£Á¿×Ö·û´® //CallContext¿ÉÒÔÀí½âΪÿ¸öÏ̵߳ĶÀÓÐkey,value¼¯ºÏÀ࣬ÿ¸öÏ̶߳¼»áÓÐ×Ô¼ºµÄ´æ´¢Çø£¬ // Ò²¾ÍÊÇÔÚÏß³ÌAÖÐÉèÖÃÒ»¸ökeyΪxxµÄvalue£¬ÔÚÏß³ÌBÖÐͨ¹ýxxÈ¡²»µ½£¬²¢¿ÉÒÔ´æÈëÏàͬ¼üµÄvalue£¬µ«ÊDz»»áÏ໥¸²¸Ç¡¢Ó°Ïì unitOfWorkKey = CallContext.LogicalGetData(ContextKey) as string; if (unitOfWorkKey == null) {//ûÓÐÈ¡µ½Öµ£¬±íʾµ±Ç°ÎÞ¹¤×÷µ¥Ôª logger.Warn(); return; } IUnitOfWork unitOfWork; (!UnitOfWorkDictionary.TryGetValue(unitOfWorkKey, out unitOfWork)) {//¸ù¾ÝkeyûÓÐÈ¡µ½value£¬´ÓÏ̼߳¯ºÏ£¨CallContext£©ÖÐÊͷŸÃkey CallContext.FreeNamedDataSlot(ContextKey); return; } //´Ó¹¤×÷µ¥Ôª¼¯ºÏÖÐÒÆ³ýµ±Ç°¹¤×÷µ¥Ôª UnitOfWorkDictionary.TryRemove(unitOfWorkKey, out unitOfWork); if (unitOfWork.Outer == null) {//Èç¹ûµ±Ç°¹¤×÷µ¥ÔªÃ»ÓÐÍâ²ã¹¤×÷µ¥Ôª£¬Ôò´ÓÏ̼߳¯ºÏ£¨CallContext£©ÖÐÊͷŸÃkey CallContext.FreeNamedDataSlot(ContextKey); return; } (!UnitOfWorkDictionary.TryGetValue(outerUnitOfWorkKey, out unitOfWork)) {//Èç¹ûµ±Ç°¹¤×÷µ¥ÔªÓÐÍâ²ã¹¤×÷µ¥Ôª£¬µ«ÊÇ´Ó¹¤×÷µ¥Ôª¼¯ºÏÖÐûÓÐÈ¡µ½ÁËÍâ²ã¹¤×÷µ¥Ôª£¬ÄÇôͬÑù´ÓÏ̼߳¯ºÏ£¨CallContext£©ÖÐÊͷŸÃkey CallContext.FreeNamedDataSlot(ContextKey); return; } //Äܵ½ÕâÀ¾Í±íʾµ±Ç°¹¤×÷µ¥ÔªÓÐÍâ²ã¹¤×÷µ¥Ôª£¬²¢ÇÒ´Ó¹¤×÷µ¥Ôª¼¯ºÏÖлñÈ¡µ½ÁËÍâ²ã¹¤×÷µ¥Ôª£¬ÄÇô¾ÍÉèÍâ²ã¹¤×÷µ¥ÔªÎªµ±Ç°¹¤×÷µ¥Ôª CallContext.LogicalSetData(ContextKey, outerUnitOfWorkKey); }

¿´Íêset£¬ÔÙÈÃÎÒÃÇÀ´¿´¿´get°É£º

¡¡

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

ÍøÓѵãÆÀ
æ