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