单班交易

时间:2013-03-26 06:13:11

标签: c# entity-framework entity transactionscope

我有一个利用三层的asp.net应用程序: DAL - >实现EntityFramework的IUnitOfWork接口 BLL - >一组业务逻辑类,其中evenry类继承自基本业务逻辑类 UI - >网络表格

Base business logic class appears like following
public class BasebusinessLogicClass<TEntity>
ctor(IUnitOfWork uow){this.Unit = uow)
public void Insert(T entity) { // add entity on unit context and call SaveChanges}
public void Edit(T entity) { // edit entity on unit context and call SaveChanges}
public void Delete ..// as the above snippet..

正如您在我的代码片段中看到的,每个业务逻辑类都执行“atomics”业务操作。每次调用Insert,Delete,Edit方法都会调用SaveChanges()。 现在,我需要实现一种Transaction,其范围必须限制在类上,例如:

public class BusinessTransactionBase 
private collection of BusinessLogicBase;
public void Begin() {..initialize the TransactionScope class of .NET}
public void Commit() {Call Complete methid of transactionScope}
public void Rollback() {Dispose transasctionScope object}
public BusinessObjectBase<T> LoadBusinessObject<T>(){ return business logic base of T entity}

嗯,我正在寻找的是只允许在事务上加入businessLogicBase的私有集合。因此,如果从另一点开始有人执行类似“PersonLogicBase.Insert(T item)”的事情,并且我的事务将回滚,则PersonLogicBase.Insert(T项)将不受撤消操作的影响。

据我所知,实现这一目标的唯一方法是在分离的线程上实例化每个BusinessTransaction对象,但我会使用更好/更简单的解决方案。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

工作单位是商业交易。如果需要在单独的事务中对给定类型执行所有操作,则需要该类型的新工作单元实例。如果您共享工作单元,您还将分享业务交易。