【发布时间】:2020-01-28 09:58:34
【问题描述】:
在 Entity Framework Core 中,您通常会使用这样的东西,它应该适用于几乎所有情况:
using (var dbContext = new MyDbContext()) {
await dbContext.Entities.WhereAsync(e => e.Something == somethingElse);
await dbContext.SaveChangesAsync();
}
您还可以将依赖注入与数据库上下文一起使用。现在您可以将数据库上下文添加到 DI 容器中,并将其注入到您需要的类/控制器/构造器/方法中:
IHostBuilder builder = new HostBuilder()
.ConfigureServices((context, collection) => {
string connectionString = context.Configuration.GetConnectionString("MyDatabase");
collection.AddDbContext<MyDbContext>();
...
public class Foo {
public Foo(MyDbContext dbContext) { }
}
但是,将它注入到类/构造函数中,您通常会将实例保留为局部变量,这很公平,但不再有任何可能使用 using 语句。现在两种不同的方法最终可能会同时使用同一个 dbContext,这很可能会导致并发问题。
如果 dbContext 没有被注入,而只是在 using 语句中使用,那么并发应该没有问题,并且对象将在每个方法的末尾被释放。
那么您将如何正确处理并发和使用 Entity Framework Core 和依赖注入进行处置?
【问题讨论】:
-
AddTransient 或 AddScoped 到 DI 时并发有什么问题?
标签: c# dependency-injection entity-framework-core