C# 在多个方法中使用相同的dbcontext
我有一个问题,我会在多个方法中使用相同的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 {
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。所有方法都将在相同的上下文中操作。