내 작업 단위 (UOW)가 아키텍처에 잘못 설정된 것 같습니다. 여기에 내가 현재 가지고있는 것 (주문을 보여주기 위해 들여 쓰기)이 있습니다 : 여기에 나는 NHibernate를 사용하여 crud를 수행하기위한 다양한 서비스를 호출합니다. 내가으로 실행하고NHibernate의 작업 단위 및 요청 당 세션
UnitOfWork.Commit()
Transaction.Commit() // This is my sessions transaction from the begin above
을 다음 HttpRequest에이 끝나면
using (var transaction = unitOfWork.Session.BeginTransaction())
{
try
{
// These are just generics
ret = (Key)unitOfWork.Session.Save(entity);
transaction.Commit();
rb.unitOfWork.Session.Clear();
}
catch
{
transaction.Rollback();
rb.unitOfWork.Session.Clear();
rb.unitOfWork.DiscardSession();
throw;
}
}
, 나는 이러한 단계를 수행 : 나는 (저장/업데이트) 데이터베이스를 변경하려는 경우,이 코드를 호출 대량 배치 프로세스를 롤백 할 수있는 문제 위에서 볼 수 있듯이 CRUD 계층에서 트랜잭션을 커밋하기 때문에 트랜잭션이 더 이상 활성화되지 않고 UnitOfWork에서 롤백을 시도 할 때 이미 커밋 된 트랜잭션 때문에 아무것도 수행되지 않습니다. 내 CRUD 계층에서 내 코드를 커밋하는 이유는 너무 오래 데이터베이스를 잠그지 않고 최대한 빨리 내 데이터를 유지할 수 있기 때문입니다.
위와 같은 상황에서 취할 수있는 최선의 조치는 무엇입니까? 일괄 처리 작업을 수행하지 않고 작업이 끝나면 커밋을 처리하는 특별한 CRUD 작업을 수행합니까, 아니면 UnitOfWork 및 Session Per Request에 내 논리가 결함이 있습니까? 어떤 제안?
가장 간단한 설명 지금까지 발견했습니다! – Joel