UnitOfWork:IUnitOfWork 2 { 注入对象 IUnitOfWorkContext context; 维护一个Sql语句的命令列表 List<CommandObject> commands; UnitOfWork(IUnitOfWorkContext context) 14 { 15 commands = new List<CommandObject>(); 16 this.context = context; 17 } 增、删、改命令 Command(string commandText, IDictionary<string, object> parameters) 26 { 27 IsCommited = false; 28 commands.Add(new CommandObject(commandText, parameters)); ; 30 } 提交状态 IsCommited{ get; set; } 提交方法 Commit() 42 { 43 if (IsCommited) { return ; } 44 using (TransactionScope scope = new TransactionScope()) 45 { 46 foreach (var command in commands) 47 { 48 context.ExecuteNonQuery(command.command, command.parameters); 49 } 50 scope.Complete(); 51 IsCommited = true; 52 } 53 } 事务回滚 RollBack() 59 { 60 IsCommited = false; 61 } 62 }
最后定义工作单元对事务提交处理的上下文及其实现,同仓储模式中的代码。
IUnitOfWorkContext 2 { 注册新对象到上下文 ExecuteNonQuery(string commandText, IDictionary<string, object> parameters = null); 查询对象集合 List<T> ReadValues<T>(string commandText, IDictionary<string, object> parameters = null, Func<IDataReader, T> load = null) where T : class, new(); 查询对象集合 List<object> ReadValues(string commandText, Type type, IDictionary<string, object> parameters = null, Action<dynamic> setItem = null); 查询对象 T ExecuteReader<T>(string commandText, IDictionary<string, object> parameters = null, Func<IDataReader, T> load = null) where T : class,new(); 查询数量 ExecuteScalar(string commandText, IDictionary<string, object> parameters = null); 48 }
最后实现。