在ASP.NET Core / EntityFramework Core中,services.AddDbContext<>方法将指定的上下文添加为作用域服务。我的理解是,这是Microsoft建议的dbcontext生命周期管理。
然而,我们的工程师部门对此有很多争论,许多人认为需要尽快处理上下文。那么,将dbcontext配置为Transient仍然保持通常使用的相同Repository模式(即将上下文直接注入存储库的构造函数)以及支持灵活的单元测试的最佳方法是什么?
答案 0 :(得分:37)
生命周期是AddDbContext<>()
上的参数。见例:
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")),
ServiceLifetime.Transient);
这会将其添加到具有短暂生命周期的服务集合中。
答案 1 :(得分:-1)
您还可以创建具有idbcontext构造函数参数的存储库类和接口。让所有控制器构造函数在其构造函数中使用此接口。可以使用addtransient添加它。这样,Microsoft仍会根据需要控制dbcontext。上下文将由运行时管理,并在创建控制器时创建存储库实例时注入。