我正在使用.Net core 2.1 + EF Core来构建WebApi。基于这个讨论:Entity Framework: One Database, Multiple DbContexts. Is this a bad idea?和DDD的有界上下文概念我想在我的应用程序中为不同的功能创建多个DbContext。 Julie Lerman在PluralSight.com上提供了一些资源,但不包括.net core
中的依赖注入。到目前为止,我做了这样的事情:
var connectionString = Configuration.GetConnectionString("DatabaseName");
services.AddDbContext<DatabaseContext>(options =>
options.UseSqlServer(connectionString, optionsBuilder =>
optionsBuilder.MigrationsAssembly("Database.Migrations")));
services.AddDbContext<ProductContext>(options =>
options.UseSqlServer(connectionString));
services.AddDbContext<CountryContext>(options =>
options.UseSqlServer(connectionString));
这里DatabaseContext
是用于EF Core迁移的上下文(实际上不查询数据),ProductContext
和CountryContext
是我用于数据操作的两个上下文。我的问题是:
具有有界背景的概念本身就很好。它基于特定应用程序不应该访问它不需要的东西的想法。就个人而言,我认为这有点过分,但合理的人可以在这个问题上存在分歧。
但是,你在这里所拥有的,是完全错误的。如果您的应用程序需要访问所有这些有界的上下文,那么拥有它们是没有意义的。只需提供一个具有所需访问权限的上下文。是的,每个上下文都有一个单独的连接,所以是的,你可能会在播放服务请求中有多个连接。再次,这就是为什么在这种情况下忽略你的上下文是没有意义的。
但是,如果你采用微服务架构方法,每个微服务处理一个谨慎的功能单元,并且你想成为一个纯粹主义者,使用有界上下文是有道理的,但在一个单片应用程序中,它不会。