Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在多个类中实现dbContext_C#_Asp.net_Entity Framework_Entity Framework 4_Dbcontext - Fatal编程技术网

C# 如何在多个类中实现dbContext

C# 如何在多个类中实现dbContext,c#,asp.net,entity-framework,entity-framework-4,dbcontext,C#,Asp.net,Entity Framework,Entity Framework 4,Dbcontext,当一个方法“需要”2DbContext对象时,我不确定处理DbContext的最佳方法。我有一些类执行正常的CRUD操作,在每次插入/编辑之后,我使用log\u History实体记录所做的更改。我没有在多个类中复制相同的代码,而是创建了一个公共静态方法来添加一个新的Log\u History实体 我最初的想法是这不是个好主意。使用2DbContext对象是否会出现并发问题?我不确定我是否理解正确,但问题得到的回答是多个上下文都可以。在CreateOrder()中将我的DbContext作为Ad

当一个方法“需要”2
DbContext
对象时,我不确定处理
DbContext
的最佳方法。我有一些类执行正常的CRUD操作,在每次插入/编辑之后,我使用
log\u History
实体记录所做的更改。我没有在多个类中复制相同的代码,而是创建了一个公共静态方法来添加一个新的
Log\u History
实体

我最初的想法是这不是个好主意。使用2
DbContext
对象是否会出现并发问题?我不确定我是否理解正确,但问题得到的回答是多个上下文都可以。在
CreateOrder()
中将我的
DbContext
作为
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();
    }
 }
}

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

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


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

您不能将DBContext作为参数传入并从那里使用它吗?这就是我所说的“将DBContext作为AddHistoryNote()的参数传入CreateOrder()中”的意思。我知道这会起作用,但我需要一些保证,这将是一个有效的方法。对不起:)是的,在这种情况下,我看不出有什么问题。它还允许你管理交易。你会推荐什么,或者为什么不推荐它?@KRob-我不会推荐它,因为它没有必要。我可能会将其实现为DbContext上的C#扩展方法,或者DbContext的方法。