私は3層レイヤーを利用するasp.netアプリケーションを持っています:DAL->EntityFrameworkBLLを実装するIUnitOfWorkインターフェース->偶数クラスが基本ビジネスロジッククラスUIから継承するビジネスロジッククラスのセット->Webフォーム
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..
私のコードスニペットでわかるように、すべてのビジネスロジッククラスは「アトミック」ビジネスオペレーションを実行します。Insert、Delete、Editメソッドを呼び出すたびに、SaveChanges()が呼び出されます。ここで、スコープをクラスに制限する必要がある一種のトランザクションを実装する必要があります。たとえば、次のようになります。
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 item)は元に戻す操作の影響を受けません。
私の知る限り、これを実現する唯一の方法は、分離されたスレッドですべてのBusinessTransactionオブジェクトをインスタンス化することですが、より優れた/単純なソリューションを使用します。
何か案が?