如何在多个类中实现dbContext

时间:2014-08-01 04:34:09

标签: c# asp.net entity-framework entity-framework-4 dbcontext

当一种方法" 需要"时,我不确定处理DbContext的最佳方式2个DbContext个对象。我有用于执行常规CRUD操作的类,并且在每次插入/编辑之后,我记录所做的更改 - 使用Log_History实体。我没有在多个类中复制相同的代码,而是创建了一个用于添加新Log_History实体的公共静态方法。

我最初的想法是,这不是一个好主意。使用2个DbContext对象会出现并发问题吗?我不确定我是否理解正确,但是this问题得到了多个上下文可以回答的响应。如何将DbContext作为CreateOrder()的{​​{1}}传递给AddHistoryNote()。那会是一种可接受的方法吗?

public class Log
{

public static void AddHistoryNote(Guid UserId, string Type, string Detail)
{
    using (rsContext repo = new rsContext()) {
        Log_History trans = new Log_History {
            UserId = UserId,
            Description = Type,
            Detail = Detail,
            HistoryDate = DateTime.Now
        };

        repo.Log_History.Add(trans);
        repo.SaveChanges();
    }

}

}

public class DoStuff
{

private void CreateOrder(BT.TransactionInfo TransDetails)
{
    using (rsContext repo = new rsContext()) {
        rsDataAccess.Order newOrder = new rsDataAccess.Order {
            Amount = TransDetails.Amount,
            OrderDate = DateTime.Now,
            Status = Status.RIDER_PAID,
            RequestId = TransDetails.RequestId
        };

        ' Add hisotry here 
        Log.AddHistoryNote(TransDetails.UserId, "TransactionType", "My history note");

        repo.Orders.Add(newOrder);
        repo.SaveChanges();
    }
 }
}

1 个答案:

答案 0 :(得分:0)

我不确定你认为这里有什么问题,但没有。

调用这样的静态方法没有并发问题。您的DbContext本身不是静态的(如果是,那将是一个问题)并且您正在新建一个实例。

这并不是说我会建议这样做,但这不会是一个错误。