C# 在多个方法中使用相同的dbcontext

C# 在多个方法中使用相同的dbcontext,c#,entity-framework,design-patterns,singleton,dbcontext,C#,Entity Framework,Design Patterns,Singleton,Dbcontext,我有一个问题,我会在多个方法中使用相同的dbContext,例如: public class Communication { public Response AddCommunication(Commnucation myComm) { using(MYDB dbContenxt = new MYDB()) { DBCOMMUNICATION dbComm = new DBCOMMUNICATION {

我有一个问题,我会在多个方法中使用相同的dbContext,例如:

public class Communication
{
   public Response AddCommunication(Commnucation myComm)
   {
      using(MYDB dbContenxt = new MYDB())
       {
           DBCOMMUNICATION dbComm = new DBCOMMUNICATION
           {
               ID = myComm.Id,
               NAME = myComm.Name,
               SUBJECT = myComm.Subject,
               MESSAGE = myComm.Message
           };

           if(myComm.Images != null && myComm.Images.Count > 0)
           {
               foreach(var image in Images)
               {
                   IMAGES dbImages = new IMAGES
                   {
                       ID_COMMUNICATION = myComm.Id,
                       NAME = image.Name,
                       VALUE = image.Value
                   };
                   dbContext.IMAGES.add(dbImages);
               }
           }

           if(myComm.Attachments != null && myComm.Attachments.Count > 0)
           {
               foreach(var image in Images)
               {
                   same work .......
                }
           }
        dbContext.SaveChanges();    
       }
      .......
      .......
    }
}
 if(myComm.Images != null && myComm.Images.Count > 0)
       {
            AddImages(myComm);
       }
我将提取使用foreach循环的方法,例如:

public class Communication
{
   public Response AddCommunication(Commnucation myComm)
   {
      using(MYDB dbContenxt = new MYDB())
       {
           DBCOMMUNICATION dbComm = new DBCOMMUNICATION
           {
               ID = myComm.Id,
               NAME = myComm.Name,
               SUBJECT = myComm.Subject,
               MESSAGE = myComm.Message
           };

           if(myComm.Images != null && myComm.Images.Count > 0)
           {
               foreach(var image in Images)
               {
                   IMAGES dbImages = new IMAGES
                   {
                       ID_COMMUNICATION = myComm.Id,
                       NAME = image.Name,
                       VALUE = image.Value
                   };
                   dbContext.IMAGES.add(dbImages);
               }
           }

           if(myComm.Attachments != null && myComm.Attachments.Count > 0)
           {
               foreach(var image in Images)
               {
                   same work .......
                }
           }
        dbContext.SaveChanges();    
       }
      .......
      .......
    }
}
 if(myComm.Images != null && myComm.Images.Count > 0)
       {
            AddImages(myComm);
       }
在AddImages方法中,我将使用相同的dbContext进行add,但仅在AddCommunication中使用SaveChanges。
这样做的最佳实践是什么??是否为dbContext使用单例模式?请帮帮我。感谢并为我糟糕的英语感到抱歉。

只需将dbContext传递给新方法即可

if(myComm.Images != null && myComm.Images.Count > 0)
{
   AddImages(dbContext, myComm);
}

...

private void AddImages(MYDB dbContext,Commnucation myComm)
{
   ...
}

将dbContext作为参数传递给该新方法(AddImages)。我了解到stackoverflow是一种不好的做法,出于性能原因,它不可能是坏的,因为它不会以任何方式影响性能。您只需执行与现在相同的操作,但将部分功能提取到不同的方法。您没有创建新的上下文或类似的内容。您可以使用依赖项注入。您没有提到它是否是一个web应用程序,但如果是,您可以为每个请求注册dbContext。所有方法都将在相同的上下文中操作。