2011-04-18 2 views
2

약간의 문제가 있습니다. 로컬 호스트에서 실행되는 응용 프로그램을 가지고 있지만 모든 것이 정상이지만 프로덕션 웹 서버에 업로드 할 때 데이터베이스를 연결하려고하면 "죄송합니다. 요청을 처리하는 동안 오류가 발생했습니다.". 데이터베이스 상호 작용없이 페이지를 열면 작동합니다. Entity Framework를 사용하고 있지만 올바른 연결 문자열이 있는지 확실하지 않습니다.Entity Framework 배포 - 연결 문자열

이것은 로컬 호스트에 대한 연결 문자열입니다

<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> 

있습니까? 나는 그 암호가 맞을 것이라고 확신한다.

도와 주셔서 감사합니다.

편집 :

죄송합니다. : -/연결은 정상입니다. 그러나 프로덕션 서버의 관계가 문제의 원인입니다.

등급이 Training이고 등급이 Instructor입니다. (교육에는 강사가 한 명 있습니다).

@training.InstructorID 

내가 normaly 교육 강사의 ID를 얻을 수 있지만, 내가 전화 할 때 :

내가보기에 호출하면

@training.Instructor.Fullname 

나는 오류 메시지가 표시됩니다. localhost에서는 모든 것이 작동합니다.

아이디어가 있으십니까? 감사.

+0

초기 카탈로그가 두 서버간에 서로 다른가요? 일반적으로 DB * 이름 *은 DB가 배포되는 위치와 관계없이 동일합니다. – BrokenGlass

+0

초기 카탈로그는 데이터베이스 이름과 비슷합니다. 맞습니까? localhost의 데이터베이스 이름은 KravmagaIS이고 호스트 된 서버의 데이터베이스 이름은 db3542입니다. –

+1

@ Ishkuda : 예, DB 이름입니다.또한 해당 서버의 SQL이 원격 연결을 허용하는지, TCP/IP가 SQL로 설정되어 있는지, 포트는 방화벽에서 열려 있는지 확인하십시오. 일반적인 후보자 – BrokenGlass

답변

2

개발 환경에서 동일한 코드가 실행되므로 코드에 문제가 있어서는 안됩니다. 또한 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. 이 코드는 1 개의 외부 쿼리를 exacute하기 때문에 N + 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; 
} 
+0

감사합니다. MARS 님이 내 문제를 해결해 주셔서 감사합니다. –

관련 문제