Unit Of Work Pattern(ORM Transaction Controller) Implementation Sample
来源:互联网 发布:淘宝商品标题怎么优化 编辑:程序博客网 时间:2024/05/21 17:42
1. Transaction Unit Entity
public class TransactionUnitBase { public ActionType ThisActionType { get; set; } } public class TransactionUnit<TIn,TOut> : TransactionUnitBase { public Func<TIn,TOut> UnitAction { get; set; } public TIn ActionParam { get; set; } } public class TransactionUnit<TIn> : TransactionUnitBase { public Action<TIn> UnitAction { get; set; } public TIn ActionParam { get; set; } } public class TransactionUnitNoParam<TOut> : TransactionUnitBase { public Func<TOut> UnitAction { get; set; } }
2.ActionType
public enum ActionType { BothParamAndReturn, ParamOnly, ReturnOnly }
3.TransactionUnit Manager
public class TransactionUnitManager : ITransactionUnit { private readonly List<dynamic> _currentWorks; public TransactionUnitManager() { _currentWorks = new List<dynamic>(); } public ITransactionUnit AddWorkUnit<TParam, TReturn>(Func<TParam, TReturn> work,TParam pamameter) { var unitOfWork = new TransactionUnit<TParam,TReturn> { ThisActionType = ActionType.BothParamAndReturn, ActionParam = pamameter, UnitAction = work }; _currentWorks.Add(unitOfWork); return this; } public ITransactionUnit AddWorkUnit<TParam>(Action<TParam> work,TParam parameter) { var unitOfWork = new TransactionUnit<TParam> { ThisActionType = ActionType.ParamOnly, ActionParam = parameter, UnitAction = work }; _currentWorks.Add(unitOfWork); return this; } public ITransactionUnit AddWorkUnit<TReturn>(Func<TReturn> work) { var unitOfWork = new TransactionUnitNoParam<TReturn> { ThisActionType = ActionType.ReturnOnly, UnitAction = work }; _currentWorks.Add(unitOfWork); return this; } public void CommitTransaction() { try { using (var scope = new TransactionScope(TransactionScopeOption.Required, TimeSpan.FromMinutes(10))) { foreach (var t in _currentWorks) { if (t.ThisActionType == ActionType.BothParamAndReturn) { t.UnitAction(t.ActionParam); } else if (t.ThisActionType == ActionType.ParamOnly) { t.UnitAction(t.ActionParam); } else if (t.ThisActionType == ActionType.ReturnOnly) { t.UnitAction(); } } scope.Complete(); } } finally { _currentWorks.Clear(); } } }
- Unit Of Work Pattern(ORM Transaction Controller) Implementation Sample
- Unit of Work in ORM
- LUW (Logical Unit of Work)
- Unit Of Work--工作单元
- Unit of work, Transactions and Grails
- 企业模式之Unit Of Work模式
- 企业模式之Unit Of Work模式
- UI Object Connector Implementation of Mediator Pattern
- Implementation of Dependency Injection Pattern in C#
- Implementation with OpenKnowledge Stage1 – Analysis of Chii`s work
- Program work 3. Implementation of Deque using array
- Entity Framework Repository & Unit Of Work T4 Template on CodePlex
- 对工作单元——Unit of Work的理解
- Axon Framework工作单元,The Unit of Work
- SQLSERVER Negative SQL Server SPIDs(Unit of Work ID)
- Example of Enterprise Integration Pattern With Biztalk2004 Implementation
- sample transaction code
- 【翻译】在Entity Framework 4.0中使用 Repository 和 Unit of Work 模式
- HDU 2050 折线分割平面
- MTK Android部分配置修改
- 更新android出现的问题
- linux驱动模型
- Java:String、StringBuffer和StringBuilder的用法
- Unit Of Work Pattern(ORM Transaction Controller) Implementation Sample
- MFC+OPENCV多个相同摄像头同时工作
- mybatis 学习5
- 项目管理之JIRA流程监控
- Vijos P1844(积木大赛-贪心)
- C#如何将byte[]写入文件的方法和注意的问题
- linux whoami cp mv mesg 命令 c语言实现(部分功能)
- buffer busy waits等待事件案例-vage
- Myeclipse 6.5 优化