Я изменил подход, основанный на наборе данных, для моей базы данных sqlite на подход, использующий Entity Framework. Я создал объекты с помощью мастера Visual Studio 2008, и строка подключения была сохранена в app.config. Затем клиентская программа связывается через WCF с базой данных. Это хорошо работает на компьютере разработчика, когда я размещаю службу WCF в консольном приложении. После размещения службы в IIS7 на удаленном компьютере я получаю сообщение об ошибке: «Основной поставщик не удалось открыть». Он генерируется при первой попытке операции чтения из базы данных.
Автоматически сгенерированная строка подключения:
<add name="xPMDbEntities" connectionString="metadata=res://*/PM_EDM.csdl|
res://*/PM_EDM.ssdl|
res://*/PM_EDM.msl;
provider=System.Data.SQLite;
provider connection string="
data source=G:\PMPersistence\xPMDb.s3db""
providerName="System.Data.EntityClient" />
(я разбил строку на несколько строк, чтобы сделать ее более читабельной).
На сервере это не работает, даже если я размещаю базу данных в том же месте, что и на компьютере разработчика. Нужно ли редактировать что-либо из остальной части строки подключения (о которой я не понимаю в первую очередь)? Ссылка на хороший ресурс о том, как построить строки соединения EF, также будет очень полезна!
РЕДАКТИРОВАТЬ:
Я также добавил следующий раздел в файл web.config:
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite"/>
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite"/>
</DbProviderFactories>
</system.data>
Кажется, это работает (Томас предполагает, что он должен находиться в файле machine.config), так как перед тем, как добавить эту запись, я получил сообщение о том, что System.Data.SQLite не найден.
EDIT2:
Я установил dll System.Data.SQLite на сервере, а не просто скопировал dll в каталог BIN. Оба файла machine.config в папках Framework / Config и Framework64 / Config теперь имеют вышеуказанную запись DbFactory. Это не имеет значения (если я не должен перезапустить сервер ??)