Entity Framework сохраняет изменения из разных TaskC#

Место общения программистов C#
Anonymous
Entity Framework сохраняет изменения из разных Task

Сообщение Anonymous »

Мое приложение выполняет две одновременные задачи:

Код: Выделить всё

await _fileWatcherService.StartWatchingAsync();
var backgroundTask = Task.Run(() => ProcessQueueAsync(cancellationTokenSource.Token), cancellationTokenSource.Token);
Короче, StartWatchingAsync отслеживает набор папок и уведомляет, когда файл создается или редактируется, он обновляется или вставляет запись в мой MainDatabase.Sqlite
С другой стороны, backgroundTask получает некоторые строки TCP и вставляет запись в MainDatabase.Sqlite.
Они используют разные экземпляры одного и того же класса контекста, похожие на этот

Код: Выделить всё

using (var context = new MyContext())
{
var existingFile = await context.acquisition_files.FindAsync(acquisition_file.name);

if (existingFile != null)
{
context.Entry(existingFile).CurrentValues.SetValues(acquisition_file);
}
else
{
await context.acquisition_files.AddAsync(acquisition_file);
}

try
{
await context.SaveChangesAsync();
}
catch (Exception ex)
{
ErrorHandler.LogError(ex, $"error saving changes from SaveChangesAsync in FileWatcherService class {ex.Message} AND {ex.InnerException} ");
Debug.WriteLine($"error saving changes from SaveChangesAsync in FileWatcherService class {ex.Message} AND {ex.InnerException} ");
}
}
В моем файле журнала я вижу, что очень часто база данных исключений блокируется.
Я читал, что Entity Framework не поддерживает сохранение изменений из параллельных задач, если вы не используете разные экземпляры контекста (что я и делаю).
Как я могу решить эту проблему? Должен ли я иметь выделенную базу данных (

Код: Выделить всё

Mydatabase2
) сохранить изменения из параллельной задачи?

Подробнее здесь: https://stackoverflow.com/questions/787 ... rent-taskt

Вернуться в «C#»