Я создаю 2 проекта, которые имеют одну и ту же базу данных (это база данных MDF). Первый - это редактор карт, и я использую XNA 4 и Web Services для подключения к нему. Вторая - сама игра и использует XNA 3.1 и Entity Data Model для подключения базы данных.Объект системных данных. Основной провайдер отказался от Open
Когда я запускаю редактор карт и получаю доступ к базе данных, он работает правильно. Bbut, когда я запускаю игру и получаю доступ к базе данных, она показывает ошибку «Исходный провайдер не работает при открытии»
Я думаю, что соединение с веб-службой еще не закрыто. Но я не знаю, где я должен закрыть соединение.
Вот мой код из веб-службы:
public Map AddNewMap(string username, string mapName, int sizeX, int sizeY)
{
using (BaseModelDataContext context = new BaseModelDataContext())
{
Map newMap = new Map()
{
Username = username,
Name = mapName,
SizeX = sizeX,
SizeY = sizeY,
Upload_Date = DateTime.Now,
Status = 0
};
context.Maps.InsertOnSubmit(newMap);
context.SubmitChanges(System.Data.Linq.ConflictMode.FailOnFirstConflict);
context.Dispose();
return newMap;
}
}
EDIT:
Вот код модели данных объект:
using (MazeEntities ent = new MazeEntities())
{
ent.Connection.Open();
return (from map in ent.Map
select map).ToList<Map>();
}
Этот код работает правильно, если я не использовал веб-службы раньше. Если я сначала использую веб-сервис, он показывает ошибку на ent.Connection.Open();
Вот внутреннее исключение:
Может не база данных открыт по умолчанию пользователя. Ошибка входа. \ R \ nЛогин не удалось выполнить для пользователя erkape-PC \ erkape.
Строка соединения для веб-службы:.
ConnectionString = "Источник данных = \ SQLEXPRESS; AttachDbFilename = | DataDirectory | \ 3DMapDatabase.mdf; Integrated Security = True; Connect Timeout = 30; Instance пользователя = True "строка
Подключение к игре:
" метаданных = Рез: // /MazeDa taModel.csdl | res: // /MazeDataModel.ssdl|res://*/MazeDataModel.msl;provider=System.Data.SqlClient; provider connection string = " Источник данных =. \ SQLEXPRESS; AttachDbFilename = D: \ eRKaPe \ DropBox \ TA \ Program \ 3D_Map_Editor \ 3DMapEditorServices \ App_Data \ 3DMapDatabase.mdf; Integrated Security = True; время ожидания Connect = 30; User Instance = True; MultipleActiveResultSets = True " "providerName =" System.Data.EntityClient "/>
Использованный блок автоматически использует контекст после использования. Вам не нужно явно ссылаться на контекст.Dispose() здесь. Это не решает вашу проблему. Просто информация в целом. Благодаря удалению контекста (независимо от того, неявно или явно) базовое соединение также должно быть закрыто. Проблема должна быть где-то в другом месте. Извините, я не мог больше помочь. –
Я думаю, что внутреннее исключение скажет вам, что такое ошибка. Проверьте строку подключения и пользователь, который пытается подключиться к базе данных и ее разрешениям. –
Публикация внутреннего исключения (-ов) здесь. Кроме того, учтите, что использование контекста предоставляет базовое соединение, но утилизация соединения ** не означает, что соединение будет физически ** закрыто **. Он просто возвращается в пул соединений и может быть повторно использован. – Dennis