我在 aspx
文件(.NET Framework 4.6.2 项目)中有以下方法:
public static string SetAvgPeriodDays(int userId)
{
var service = new AveragePeriodDaysService(EfHelper.GetContext());
try
{
return service.SetAveragePeriodDays(userId);
}
catch (Exception e)
{
return e.Message;
}
}
AveragePeriodDaysService
类有一个接受 DbContext
实例的构造函数:
public class AveragePeriodDaysService
{
private readonly MyDbContext _ctx;
public AveragePeriodDaysService(MyDbContext ctx)
{
_ctx = ctx;
}
public string SetAveragePeriodDays(int userId)
{
// main logic goes here...
}
}
这里是 EfHelper
类:
public class EfHelper
{
public static MyDbContext GetContext()
{
var options = new DbContextOptionsBuilder<MyDbContext>();
var connectionString = ...
options.UseSqlServer(connectionString);
options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);
return new MyDbContext(options.Options);
}
}
问题。我应该处理 MyDbContext 吗?如果是,我应该如何正确操作?
最佳答案
作为一条规则,你永远不应该处理你从外部获得的依赖,因为你永远不知道还有谁在使用这个依赖的相同实例。这意味着 AveragePeriodDaysService
无法处理 MyDbContext
。但是 SetAvgPeriodDays
确切地知道谁将使用 MyDbContext
,因为它请求创建 MyDbContext
,因此它可以而且应该在使用后处理它。使用 using
关键字:
public static string SetAvgPeriodDays(int userId)
{
using(var ctx = EfHelper.GetContext())
{
var service = new AveragePeriodDaysService(ctx);
try
{
return service.SetAveragePeriodDays(userId);
}
catch (Exception e)
{
return e.Message;
}
}
}
关于c# - 使用 Entity Framework Core 时是否应该处理 DbContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57802133/