Можно ли добавить в DbContext без отслеживания в. net ядро - PullRequest
1 голос
/ 16 января 2020

Можно ли выполнять Add, AddAsyn c, update et c в ядре do tnet без отслеживания сущности после этого без необходимости писать код, специально отсоединяющий контекст от отслеживания сущности?

// select, its possible to do no trackiing
var audit = _dbContext.Audit.First().AsNoTracking();


// doing an add or update, audit is now tracked unless it's detached
_dbContext.Audit.Add(audit);
int rows = _dbContext.SaveChanges();
_dbContext.Entry(audit).State = EntityState.Detached;

Я спрашиваю об этом, потому что у меня есть windows служба, которая потребляет сообщения RabbitMq и записывает в БД. rabbitmq получает сообщения через обработчик событий. Таким образом, база данных по существу становится одноэлементной, хотя она добавляется как временная. Я мог бы каждый раз создавать новый контекст БД. но это кажется излишним. Или есть лучший способ?

1 Ответ

3 голосов
/ 16 января 2020

У вас не должно быть синглтона DbContext, потому что он не является потокобезопасным. Вы можете взглянуть на этот блог для различных подходов к управлению DbContext: https://mehdi.me/ambient-dbcontext-in-ef6/

...