Как должно выглядеть использование оператора при использовании Dependency Injection для DBContext? - PullRequest
2 голосов
/ 31 марта 2020

При внедрении DBContext в мой репозиторий, как должен выглядеть оператор using?

Пример: Startup.cs

services.AddDbContext<VisualDbContext>(options => options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));

VisualDbContext.cs

public partial class VisualDbContext : DbContext
    {
        public VisualDbContext(DbContextOptions<VisualDbContext> options) : base(options)
        {}

        public DbSet<Template> Template { get; set; }
        public DbSet<Exercise> Exercise { get; set; }
        public DbSet<Symbol> Symbol { get; set; }
    }

Репозиторий

public class TemplateRepository : ITemplateRepository
    {
        private readonly VisualDbContext _dbContext;
        public TemplateRepository(VisualDbContext dbContext)

        {
            _dbContext = dbContext;
        }

        public async Task<List<KeyValuePair<char, string>>> GetTemplateAsync(int templateId)
        {
                using (_dbContext) //this seems wrong...
                {
                   ...
                }
        }

Ответы [ 2 ]

5 голосов
/ 31 марта 2020

In. NET DI ядра, DbContext будет зарегистрирован как Scoped Service , что означает, что его время жизни контролируется контейнером DI, и вам не нужно об этом беспокоиться.

В ASP. NET Ядро Область привязана к Http-запросу, поэтому вы получите тот же экземпляр DbContext, внедренный во все зависимые сервисы в ходе обработки запроса, и DbContext будет Быть утилизированным в конце запроса.

Это упрощает ваш код, так как вы можете опустить инициализацию блоков DbContext и using, которые в противном случае необходимы, и это позволяет вам легко охватывать транзакции, которые межсервисные границы.

0 голосов
/ 31 марта 2020

Определяя свойство _dbContext, вам не нужно использовать оператор using. По сути, он создает новый VisualDbContext, когда вы используете хранилище, и удалит его, когда вы закончите использовать хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...