gpt4 book ai didi

c# - 使用 Entity Framework Core 时是否应该处理 DbContext

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:36 34 4
gpt4 key购买 nike

我在 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com