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

相关问题