如何将类实例传递给基类构造函数

时间:2013-04-28 14:22:54

标签: c# entity-framework repository-pattern

我的交易存在问题,因为它们被升级为分布式交易,我不想要。从我读到的,这是由在事务范围内打开多个连接引起的。为了解决这个问题,我正在重新编写代码,以便能够创建一个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);

    }

1 个答案:

答案 0 :(得分:3)

很难说这里做的正确是什么,但听起来你希望上下文是静态字段,而不是实例字段。 / p>

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 nrvs in the nms,thyr hrd 2 rd。我想你想说InventoryManagementContext