Почему мое приложение .Net Core получает исключение при попытке удалить файл базы данных, созданный DevExpress XPO?C#

Место общения программистов C#
Ответить
Anonymous
 Почему мое приложение .Net Core получает исключение при попытке удалить файл базы данных, созданный DevExpress XPO?

Сообщение Anonymous »

У меня есть приложение .NetCore (.Net 8.0), использующее DevExpress XPO.
Приложение создает и фиксирует файл резервной копии.
Я создаю серию повторяющихся резервных копий. который сохраняет несколько резервных копий на диске, а затем удаляет самую старую при превышении порогового значения.
Приложение получает исключение «процесс не может получить доступ к файлу», когда я пытаюсь удалить файл резервной копии. создано во время текущего сеанса.
В приложении я создал упрощенный фрагмент кода (с пометкой базы данных), который воссоздает исключение при каждом запуске.Рассмотрим следующий фрагмент кода:

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

var connectionString = "XpoProvider=SQLite;Data Source=filename.db";
_ = XpoDefault.GetConnectionProvider(connectionString, AutoCreateOption.DatabaseAndSchema);

var backupDBFileName = @"BackupDBFile.db";

if (!File.Exists(backupDBFileName))
{
File.Copy("filename.db", backupDBFileName);
}

var connectionString = SQLiteConnectionProvider.GetConnectionString(backupDBFileName);
var provider = XpoDefault.GetConnectionProvider(connectionString, AutoCreateOption.DatabaseAndSchema, out IDisposable[] objsToDispose);

var dictionary = new DevExpress.Xpo.Metadata.ReflectionDictionary();
var dataLayer = new ThreadSafeDataLayer(dictionary, provider);
XpoDefault.DataLayer = dataLayer;

// Dispose/Disconnect
// If there are objects that needs disposing along with the Data Layer, dispose of them
if (objsToDispose != null)
{
foreach (var obj in objsToDispose)
{
obj.Dispose();
}
}

XpoDefault.DataLayer.Dispose();
XpoDefault.DataLayer = null;

// Trying to cleanup
System.GC.Collect();
System.GC.WaitForPendingFinalizers();

try
{
if (File.Exists(backupDBFileName))
{
File.Delete(backupDBFileName);
}
}
catch (Exception ex) {}
Когда я пытаюсь удалить файл резервной копии [File.Delete()], я получаю следующее исключение.
Процесс не может получить доступ к файлу BackupDBFile.db, поскольку он используется другим процессом.

Подробнее здесь: https://stackoverflow.com/questions/784 ... te-a-datab
Ответить

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

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

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

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

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