2012-05-12 1 views
0

Я создаю 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 "/>

+0

Использованный блок автоматически использует контекст после использования. Вам не нужно явно ссылаться на контекст.Dispose() здесь. Это не решает вашу проблему. Просто информация в целом. Благодаря удалению контекста (независимо от того, неявно или явно) базовое соединение также должно быть закрыто. Проблема должна быть где-то в другом месте. Извините, я не мог больше помочь. –

+1

Я думаю, что внутреннее исключение скажет вам, что такое ошибка. Проверьте строку подключения и пользователь, который пытается подключиться к базе данных и ее разрешениям. –

+0

Публикация внутреннего исключения (-ов) здесь. Кроме того, учтите, что использование контекста предоставляет базовое соединение, но утилизация соединения ** не означает, что соединение будет физически ** закрыто **. Он просто возвращается в пул соединений и может быть повторно использован. – Dennis

ответ

0

Наконец я нашел способ решить мою проблему после прочтения некоторые статьи. После закрытия редактора карты соединение с веб-службой не закрывается автоматически. Вот почему я не могу получить доступ к моей базе данных из игры. Мне нужно изменить строку соединения из обоих приложений, я установил значение User Instance равным False. Таким образом, игра может получить доступ к базе данных.

-1

Вы пытаетесь вернуть объект (Карта), который связан с Контекстом. Этот объект имеет контекстную информацию, которая не может быть возвращена клиенту.

Вам необходимо будет создать свой собственный DataContract (тип, имеющий необходимые свойства), который вы хотите предоставить клиенту.

Или вы можете использовать реализацию POCO As described here

+0

Какова взаимосвязь между «Недопустимым провайдером провайдера при открытии» и «Возвратом объекта, связанного с контекстом»? – Dennis

+0

@Dennis Прошу прощения, я ответил на это исходя из моего предыдущего опыта с конкретной ситуацией. Фактическая ошибка, которую я обнаружил, это «График объектов для типа содержит циклы и не может быть сериализован, если отслеживание ссылок отключено», но на клиенте он просто отобразил общую «базовую ....» ошибку. – Hps

+0

@ Dennis, я не против проголосовать! Просто нашел ссылку, которая могла бы помочь в связи. http://www.codeexperiment.com/post/Returning-LINQ-to-SQL-Entities-From-WCF.aspx – Hps

0

Для быстрой проверки, вы можете попробовать добавить следующую строку после использования:

using (BaseModelDataContext context = new BaseModelDataContext()) 
    { 
     context.Connection.Open(); 

     OR 

     context.Database.Connection.Open(); 

     // your code here 
+0

Он по-прежнему получает ту же ошибку. – erkape

 Смежные вопросы

  • Нет связанных вопросов^_^