Member 11790928 Ответов: 1

Как использовать один и тот же файл .mdf среди нескольких приложений ?


У меня есть служба windows, работающая с использованием локального файла .mdf, а также есть проекты MVC, которые также обращаются к тому же локальному файлу .mdf. Когда я запускаю как сервис, так и проект одновременно, я получаю ошибку, что "Datatbase уже используется другим процессом или присутствует на общем ресурсе UNC". Как запустить оба приложения одновременно, используя один и тот же файл .mdf. Любая помощь в этом отношении высоко ценится.

Что я уже пробовал:

Я пробовал использовать блокировки транзакций в базе данных но та же ошибка

José Amílcar Casimiro

Опишите архитектуру вашего решения

1 Ответов

Рейтинг:
8

OriginalGriff

Если вы подключаетесь непосредственно к файлам MDF через объекты OleDbConnection, то проблема с файлами MDF заключается в том, что при открытии соединения с ними они принимают эксклюзивную блокировку файла, чтобы его можно было записать, а это означает, что никакое другое приложение не может подключиться к файлу, пока вы не освободите соединение. Если они попытаются, они получат сообщение об ошибке, которое вы испытали.

У вас есть два варианта:
1) измените все приложения, чтобы открыть соединение, выполнить работу и закрыть соединение как можно быстрее, делая паузу и повторяя попытку, если соединение не удается.
2) Измените все приложения на использование SQL Server (или MySql) вместо прямого подключения к файлам MDF, и пусть он обрабатывает множественные обращения (вот для чего он существует!)

Второй вариант звучит как большая работа, но на самом деле он проще первого и устраняет множество проблем, которые дает множественный доступ к файлам MDF, с которыми вы еще не встречались. В значительной степени это случай замены OleDbConnection, OleDbCommand и подобных объектов на SqlConnection, SqlCommand и так далее.

Если вы уже используете SQL Server, то проблема, вероятно, заключается в строке подключения: ни одно из ваших приложений не должно присоединять базу данных - она должна постоянно храниться и обрабатываться Sql Server. Прикрепление-это специальный режим Express edition только для отладки, и его не следует использовать в "живом" коде.