2013-04-28 4 views
0

내 트랜잭션에 문제가 있습니다. 분산 트랜잭션으로 에스컬레이션되고 싶지 않습니다. 원하지 않습니다. 내가 읽은 것에서 이것은 트랜잭션 범위에서 여러 연결을 열어서 발생합니다. 이 문제를 해결하기 위해 하나의 컨텍스트와 따라서 트랜잭션 범위에서 하나의 연결 만 가질 수 있도록 하나의 dbContext를 만들고이를 모든 클래스에 전달할 수 있도록 코드를 다시 작업하고 있습니다.클래스 인스턴스를 기본 클래스 생성자에 전달하는 방법

제 질문은 어떻게 컨텍스트의 인스턴스 하나를 만들어 기본 클래스에 전달합니까? 내가 올린 내용은 내가 컨셉으로하려는 것이지만, 분명히 효과가 없을 것입니다. 이것을 어떻게 할 수 있습니까?

private WorkOrderHeaderRepository _workOrderHeaderRepository; 
    private WorkOrderDetailRepository _workOrderDetailRepository; 
    private InventoryMgmtContext _dbContext; 

    #region Constructors 

    public ManageWorkOrdersAppServ() 
     : base(new WorkOrderHeaderRepository(_dbContext)) <----How pass _dbContext to base here 
    { 
     _dbContext = new InventoryMgmtContext(); 
     _workOrderHeaderRepository = new WorkOrderHeaderRepository(_dbContext); 
     _workOrderDetailRepository = new WorkOrderDetailRepository(_dbContext); 

    } 
+0

작동하지 않는 경우에도 null 참조를 전달할 수 있습니다 *. 필드를 아직 초기화하지 않았습니다. –

답변

3

옳은 일이 여기에서되는 무슨 말을하기 어렵다하지만 상황이 정적 필드 아닌 인스턴스 필드되고 싶어 것 같은데.

private static InventoryMgmtContext _dbContext = new InventoryMgmtContext(); 
public ManageWorkOrdersAppServ() 
    : base(new WorkOrderHeaderRepository(_dbContext)) 
{ 
    _workOrderHeaderRepository = new WorkOrderHeaderRepository(_dbContext); 
    _workOrderDetailRepository = new WorkOrderDetailRepository(_dbContext); 

} 

예?

여기서 단점은 컨텍스트가 영원히 살아 있다는 것인데, 이는 당신이 원하는 것이 아닐 수도 있습니다. 즉 없습니다 당신이 다음 원하는 있다면 발신자에 떨어져 문제를 밀어 :

public ManageWorkOrdersAppServ(Context dbContext) 
    : base(new WorkOrderHeaderRepository(dbContext)) 
{ 
    _workOrderHeaderRepository = new WorkOrderHeaderRepository(_dbContext); 
    _workOrderDetailRepository = new WorkOrderDetailRepository(_dbContext); 

} 

호출자가 적절한 맥락에서 통과 확인하고 해당 생성을 관리합니다.

또한이 코드를 비판하는 동안 : .NET stl gdlns frwn on nms, thyr hrd 2 rd. 너 InventoryManagementContext라고하는 것 같아.

+0

에릭, 그 대답에 감사드립니다. 내 다음 질문에서 알 수 있듯이, 나는 C# 개발에 익숙하지 않으며 "가정 교육"을하고 있습니다. 그럼 영원히 살아남을 수 있다는 것은 무엇을 의미합니까? 두 번째 방법은 제가 지금하고있는 것입니다. 컨트롤러 레벨에서 컨텍스트를 만들어야한다는 생각이 맘에 들지 않고 서버 레이어에 유지하려고했습니다. –

+0

아, 아니, 나는 오래 지속되는 dbContext를 원하지 않는다. 내 코드를 조금 리팩터링해야합니다. 감사. –

관련 문제