Entity Framework Deploy - Строки подключения - PullRequest
2 голосов
/ 18 апреля 2011

У меня маленькая проблема. У меня есть приложение, работающее на локальном хосте, и все в порядке, но когда я загружаю его на рабочий веб-сервер и хочу подключиться к базе данных, я получаю просто «Извините, произошла ошибка при обработке вашего запроса». Когда я пытаюсь страницы без взаимодействия с базой данных, это работает. Я использую Entity Framework, но я не уверен, правильно ли указаны строки подключения.

Это строка подключения для localhost:

  <connectionStrings>
    <add name="ApplicationServices" connectionString="data source=localhost\MSSQL;Integrated Security=SSPI;Initial Catalog=KravmagaIS" />
    <add name="KravmagaISEntities" connectionString="metadata=res://*/Models.KravmagaModel.csdl|res://*/Models.KravmagaModel.ssdl|res://*/Models.KravmagaModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=ISKUDA-NTB\MSSQL;Initial Catalog=KravmagaIS;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>

и этот для производственного сервера:

  <connectionStrings>
    <add name="ApplicationServices" connectionString="Data Source=192.168.1.5;User ID=db3542;Password=****;Initial Catalog=db3542" />
    <add name="KravmagaISEntities" connectionString="metadata=res://*/Models.KravmagaModel.csdl|res://*/Models.KravmagaModel.ssdl|res://*/Models.KravmagaModel.msl;provider=System.Data.SqlClient;provider connection string='Data Source=192.168.1.5;User ID=db3542;Password=*****;Initial Catalog=db3542'" providerName="System.Data.EntityClient" />
  </connectionStrings>

Есть ли ошибка? Я уверен, что пароль правильный.

Спасибо за помощь.

EDIT:

Извините за мою ошибку. : - / Соединение в порядке. Но отношения в производственном сервере являются причиной проблемы.

У меня есть класс Training и класс Instructor. (На тренинге работает один инструктор).

Когда я звоню в поле зрения:

@training.InstructorID

Обычно я получаю удостоверение инструктора по обучению, но когда я звоню:

@training.Instructor.Fullname

Я получаю сообщение об ошибке. На localhost все работает.

Есть идеи? Спасибо.

1 Ответ

2 голосов
/ 18 апреля 2011

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

Похоже, что отложенная загрузка не работает, что возвращает меня к предыдущему замечанию, что MARS (MultipleActiveResultSets) не включен в строке производственного соединения. MARS позволяет читать результаты одного запроса в цикле и одновременно выполнять другой запрос для получения подробностей. Типичный пример:

// Executes something kile SELECT * FROM Trainings and has opened
// DataReated for the whole duration of the loop.
foreach(var training in context.Trainings) 
{
    // Executes something like SELECT * FROM Instructors WHERE Id = @Id
    // and opens its own DataReader to get the result.
    // If MARS is not enabled or not supported you will get an exception
    var fullName = training.Instructor.FullName;
}

Btw. код является примером проблемы N + 1, потому что он будет выполнять 1 внешний запрос и для каждого результата внешнего запроса он будет выполнять 1 внутренний запрос. Таким образом, для N результатов внешнего запроса он выполнит N подзапросов => ЭТО ПЛОХО , и его следует избегать в максимально возможной степени, используя другую технику загрузки. Например:

// Loads both trainings ana related instructors in the same query.
foreach(var training in context.Trainings.Include("Instructor"))
{
    // No query is executed here because instructor is already loaded.
    var fullName = training.Instructor.FullName;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...