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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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