2013-04-28 94 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

即使這樣做確實有效,它不會,*你會傳遞一個空引用*。您尚未初始化該字段。 – 2013-04-28 14:26:57

回答

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 nrms中的abrvs,thyr hrd 2 rd。我想你的意思是說InventoryManagementContext

+0

埃裏克,我很欣賞這個迴應。正如你將從我的下一個問題中得出的結論,我是c#開發的新手,並且是「受過教育的人」。那麼你的意思是說它會永遠活着?第二種方法是我現在正在做的。我只是不喜歡在控制器級創建我的上下文,並試圖將它保留在服務器層的想法。 – 2013-04-29 01:36:38

+0

啊,不,我不想讓dbContext持續那麼久。我需要重構一下我的代碼。謝謝。 – 2013-06-14 18:16:27

相關問題