В настоящее время я пишу фоновый сервис, который читает сообщения из очереди и вставляет эти значения в базу данных ms sql. Я использую entityframecore для вставки значений в контекст.
Теперь у меня проблема с контекстом. Я получаю сообщение об ошибке:
InvalidOperationException: вторая операция началась в этом контексте, прежде чем предыдущая операция завершена. Любые члены экземпляра не гарантированно являются потокобезопасными. Microsoft.EntityFrameworkCore.Internal.ConcurrencyDetector.EnterCriticalSection ()
Теперь я знаю, что это проблема с asyn c, но все же ...
Я исправил это, определив новую область в начало. Но я не уверен, что это путь к go ... Вот мой код в настоящее время:
consumer.Received += async (ch, ea) =>
{
using (var scope = _scope.BeginLifetimeScope())
{
var context = scope.Resolve<DatabaseContext>();
var content = Encoding.UTF8.GetString(ea.Body.ToArray());
var message = JsonConvert.DeserializeObject<RabbitMQMessageType>(content);
switch (message.Type)
{
case "config":
await HandleConfigMessage(message.Body, context);
break;
case "measurement":
await HandleMeasurementMessage(message.Body, context);
break;
case "log":
await HandleLogMessage(message.Body);
break;
}
_channel.BasicAck(ea.DeliveryTag, false);
}
};
Вы можете видеть, что я просто передаю контекст другим методам и .Add ( ) лица. Это путь к go?
Спасибо за помощь!
С уважением