2011-09-11 5 views
2

내폴더에있는 asp.net 응용 프로그램의 .mdf 파일을 기반으로 엔티티 모델 파일 (.edmx)을 만들었습니다. 엔티티 프레임 워크 마법사에 의해 생성 된 모든 내 연결 문자열의 첫 번째데이터베이스 연결 문제 - 사용자 인스턴스 및 Entity Framework 문제

:

<connectionStrings> 
    <add name="Sales_DBEntities" 
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='data source=.\SQLEXPRESS;attachdbfilename=&quot;c:\users\ext\documents\visual studio 2010\Projects\WebProject_A\WebProject_A\App_Data\Sales_DB.mdf&quot;;integrated security=True;USER INSTANCE=TRUE;multipleactiveresultsets=True;App=EntityFramework'" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

위의 마법사에 의해 생성 된 app.config 파일에 저장됩니다.

web.config 파일에도 동일한 연결 문자열을 복사했습니다 (필요한 경우 확실하지 않습니다).

나중에 내 컴퓨터에서 동일한 응용 프로그램을 실행하려고 할 때 두 가지 문제가 발생했습니다. 다른 컴퓨터에서 응용 프로그램을 만들었습니다.

첫 번째

는 사용자 인스턴스에 대한했다 :

인해 사용자 인스턴스의 프로세스를 시작하기에 실패 SQL Server의 사용자 인스턴스를 생성하지 못했습니다. 연결이 닫힙니다.

처음 이해할 수없는 가장 중요한 사실은 사용자 인스턴스가 실제로 정의하는 것입니다.

MSDN에 따르면

내 로컬 데이터베이스는 사용자로 간주

사용자 인스턴스는 부모 인스턴스에서 생성 된 SQL Server Express는 데이터베이스 엔진의 별도의 인스턴스이다 인스턴스?

이 거짓임을 표시하는 게시물을 발견했기 때문에이 설명에 대한 설명이 정말 좋을 것입니다. 이유는 분명하지 않았습니다.

another post on this matter

는 거기에서 나는이 문제에 대한 당신의 컴퓨터에 SQL Server의 사용자 인스턴스를 활성화 할 필요가 있다고 설명 다른 해결책을 가로 질러왔다.

The Fix

나는 해당 게시물에서 설명 무슨 짓을했는지

하지만 지금은 새로운 문제 건너했습니다

에 대한 자동라는 이름의 데이터베이스를 연결하려는 시도 file (내 app_data \ my.mdf 파일에 대한 전체 경로) 동일한 이름의 데이터베이스가 있거나 지정된 파일을 열 수 없거나 UNC 공유에 있습니다.

는 이미

C:\Documents and Settings\(your user account name)\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS 

와 같은 다른 게시물에 제안 재부팅 아래에있는 모든 파일을 삭제하려고 시도했지만, 여전히 나는이 문제에 대한 명확한 해결책을 찾을 수 없습니다.

나는이 긴 포스트하지만 어떤 도움이 사전에

감사 감사하겠습니다 알고있다.

답변

3

읽어보기 very good overview of what user instances really are. - 기본 인스턴스는 단지 컴퓨터 이름 (또는 IP 주소)를 사용하여 액세스 할 수 있습니다

  • SQL 서버가 단일 컴퓨터에서 여러 인스턴스 자체의을 가질 수 있습니다 : 간단히 말해서

    컴퓨터를 호스팅 - 다른 모든 인스턴스가 개발 목적으로

  • (당신의 컴퓨터에 SQLExpress 같은)을 인스턴스 이름으로 지정해야합니다, 당신은 또한 사용자를 만들 수 있습니다 인스턴스 - 각 사용자는 SQL Server의 별도 인스턴스 (익스프레스 버전에서만 작동 함)를 가져오고 데이터베이스는 파일 이름 (path\Sales_DB.mdf)으로 해당 사용자 인스턴스에 연결됩니다. 이 인스턴스는 다음, 필요에 따라 기동 실행하고 더 이상

이 개발을위한 위대한 작품을하는 동안

을 필요로 할 때 종료되지 않습니다, 그것은 정말 나중에위한 아니에요 - 확실히 생산 사용.

프로덕션 환경에서 은 데이터베이스 파일을 일반적으로 SQL Server Management Studio를 사용하여 실제 SQL Server 인스턴스에 연결하려고합니다. 이렇게하면 파일 이름을 통해 해당 데이터베이스를 더 이상 참조하지 않고 대신 서버에 연결할 때 데이터베이스 이름 인 데이터베이스 이름을 사용합니다. 이 경우 SQL Server는 모든 작업 세부 정보를 처리합니다. SQL Server 인스턴스가 항상 실행되며 (항상 "필요시"시작될 필요는 없음) 사용 권한과 같은 것을 사용할 수 있습니다. 데이터베이스에 대한 액세스를 제어하는 ​​로그인.

연결 문자열은 다음과 같이 보일 것입니다 :

프로덕션 (또는 테스트) SQL Server 인스턴스에 데이터베이스를 첨부
<connectionStrings> 
    <add name="Sales_DBEntities" 
     connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string='server=YourServerNameHere;database=Sales_DB;integrated security=True;App=EntityFramework'" 
     providerName="System.Data.EntityClient" /> 
</connectionStrings> 

, 당신이 파일이 있는지 확인이 무엇인지 알 필요가 없습니다 SQL Server가 이러한 파일을 지정하지 않아도됩니다. 데이터베이스 이름을 통해 데이터베이스를 참조하기 만하면됩니다.

+0

사용자 인스턴스를 명확히 해 주셔서 감사합니다.하지만 완전히 이해하고 있다고 말할 수는 없지만, 더 자세히 살펴보십시오. App_Data 내의 로컬 DB가있는 asp.net 응용 프로그램을 실행하지 마십시오 USER INSTANCE를 만드시겠습니까? 2 가지 예외에 대한 의견이 있으십니까? SQL Express 서버가 내 컴퓨터에서 사용자 인스턴스를 정의하는 방식과 관련이 있습니다. –

1

이 솔루션은 예상 다음 항상 간단하다 :

  1. 두 번 model.edmx 파일을 클릭 -> 디자이너가 열립니다.
  2. 디자이너를 마우스 오른쪽 버튼으로 클릭 ->Update model from database.
  3. 새 연결 ->Choose Database file (.mdf) 유형입니다.
  4. 찾아보기 ->App_Data 폴더로 이동하여 DB를 선택하십시오.
  5. App.config에서 생성 된 연결 문자열을 web.config에 복사하십시오.

바이.

+0

감사합니다. 귀하의 솔루션이 도움이되었습니다. 이전에'| Data Directory | '때문에 오류가 발생했습니다. 명시 적으로'mdf' 파일을 선택하면 경로가 엔티티별로 실제 경로로 변경되었습니다. – Sukanya