EF5 : '{0}'파일을 데이터베이스 '{1}'(으)로 첨부 할 수 없습니다


140

여기에 설명 된대로 정확한 문제가 발생했습니다 ( "삭제 된 MDF 파일에 첨부 할 수 없음"섹션 참조). 그러나 문제에 대한 해결책은 없습니다.

간단히 말해서 문제는 .mdf파일 을 삭제 한 후 EF 5.0을 사용하여 DB에 액세스하려고 할 때 다음 예외가 발생한다는 것입니다.

DataException-> EntityException-> SqlException : '{0}'파일을 '{1}'데이터베이스로 첨부 할 수 없습니다 .

DB 파일을 삭제했는데 응용 프로그램을 실행할 때 초기화 프로그램을 사용할 것으로 예상 할 때 불쾌한 오류 메시지가 나타납니다. 이 문제를 해결할 방법이 있습니까?


1
죄송하지만 구체적인 답변을 제공하지는 않았지만 당시에는 100 % 작동하는 솔루션이 없었습니다. 사용자 연결 데이터베이스를 사용하지 않아서 오류를 피하려고합니다. 일반적으로 SQL Server Management Studio에 연결하고 오류에서 데이터베이스를 분리하여 오류를 해결할 수 있습니다.
OdeToCode

문제는 이미 실제 파일을 삭제했기 때문에 데이터베이스가 더 이상 존재하지 않는다는 것입니다. 실제로 스튜디오 중 하나 (VS와 외부에 통합)에서 살펴 보았습니다. 내 대답은 실제로 해결책이 아니라 해결 방법이며 LocalDb를 고수 할 필요가 없음을 나타냅니다.
Shimmy Weitzhandler

EF 전문가 인 로완 밀러 (Rowan Miller)는 romiller.com/2013/05/17/을 참조하십시오 . 다음 VS 버전에서 더 나은 솔루션을 제공 할 수 있기를 바랍니다.
RickAndMSFT

유용한 문제 해결 안내서 : odetocode.com/blogs/scott/scottive/2012/08/15/…
Tim Abell

답변:


220

DB 파일을 삭제해도 여전히 SqlLocalDB에 등록 된 상태로 유지됩니다. 때로는 DB를 삭제하도록 수정합니다. 명령 행에서이를 수행 할 수 있습니다.

  1. 시작 / 프로그램 메뉴에서 "VisualStudio 용 Developer Command Propmpt"를여십시오.
  2. 다음 명령을 실행하십시오.

    sqllocaldb.exe stop v11.0

    sqllocaldb.exe delete v11.0


1
VS 2012 Express를 사용하고 있기 때문에 Sql Server 개체 탐색기를 찾지 못했습니다. 따라서 허용 된 답변을 시험해 볼 수 없습니다. 그러나 당신의 대답은 완벽하게 작동했습니다. 감사.
newman

3
당신의 대답은 저를 구했습니다. 허용 된 답변에 (localdb) \ v11.0 하위 노드가 없었으며 SQL Management Studio에서 참조를 제거 할 수 없으므로 서두르십시오!
Santux

18
이것은 파일을 삭제 한 후 나를 위해 일했습니다. 도구-> 라이브러리 패키지 관리자-> 패키지 관리자 콘솔에서 명령을 실행할 수도 있습니다.
Bart Verkoeijen

11
부수적 v11.0으로이 내용은 SQL LocalDB 2012에만 해당됩니다. LocalDB 2014를 사용하는 경우 MS는 MSSqlLocalDb대신 이름을 바꿨습니다 .
CodingWithSpike 2009 년

4
위의 주석과 관련하여 어떤 db 이름도 입력 할 수 없으며 기본 이름에만 적용됩니다. 아래 2015와 함께 사용하고 작동했습니다. sqllocaldb.exe stop sqllocaldb.exe delete
Deviney

147

여전히 솔루션을 찾고있는 사람들을 위해 ...

View / SQL Server Object Explorer로 이동하여 (localdb) \ v11.0 하위 노드에서 데이터베이스를 삭제하십시오!
여기에 이미지 설명을 입력하십시오

기본적으로 파일 위치는 로컬 데이터베이스로 유지되며 데이터베이스 파일을 삭제하려면 수동으로가 아니라이 탐색기 유틸리티에서 해당 파일을 제거해야합니다.


이 비트 나를 한 번, 두 번째는 내가 자동 마이그레이션 == 거짓 FML했다이었다
workabyte

8
또한 보이지 않으면. 새 연결을 추가하고 "(localdb) \ v11.0"(Windows 인증 사용)을 입력하십시오. 간단 해 보일지 모르지만 나는 잠시 동안 내 스크린을 응시하고있었습니다. :)
Peter

@Peter Ok, 데이터베이스를 추가했는데 이제 두 가지 컨텍스트가 표시됩니다. 이보기에서 삭제하면 '이 데이터베이스의 데이터 액세스 수준을 검색 할 수 없습니다'라는 새로운 오류가 발생합니다. 명령 프롬프트를 사용 하여이 문제를 해결할 수있었습니다.
nVentimiglia

1
EF6의 기본 연결 팩토리를 사용하는 경우 대신 mssqllocaldb를 사용 중일 수 있습니다. 서버를 (LocalDb) \ mssqllocaldb로 변경하고 연결되어 있는지 확인하십시오. LocalDb에는 여러 가지 버전이 있으며 하나만 표시되는 것은 아닙니다.
Jim Yarbro

또한 내가 경험 한 것 : 더 이상 데이터베이스가 표시되지 않으면 연결 끊기를 클릭 한 다음 다시 연결하십시오. (새로 고침이 도움이되지 않음)
StefanG

19

JSobell의 솔루션을 먼저 시도했지만 거기에 내 데이터베이스가 표시되지 않았습니다. VS Developer Command Prompt에서 CodingWithSpike의 명령을 실행했지만 작동하지 않았습니다. 마지막으로 Package Manager Console에서 CodingWithSpike의 동일한 명령을 실행했으며 작동했습니다.

    PM> sqllocaldb.exe stop v11.0
    LocalDB instance "v11.0" stopped.

    PM> 
    PM> sqllocaldb.exe delete v11.0
    LocalDB instance "v11.0" deleted.

    PM> sqllocaldb.exe start v11.0
    LocalDB instance "v11.0" started.

9

좋구나.

내 솔루션은 간단했고 로컬 서버를 사용하도록 변경했습니다.

DataSource연결 문자열 의 속성을 다음에서 변경했습니다 .

Data Source=(LocalDb)\v11.0;blah

에:

Data Source=.\SQLEXPRESS;blah

또 다른 해결책은 SQL Management Studio를 통해 LocalDb에 로그인 한 후 해당 데이터베이스를 삭제하는 것입니다.

여기에 이미지 설명을 입력하십시오

그러나 그것은 나를 위해 작동하지 않습니다, 삭제하려고하면 "제목 : Microsoft SQL Server Management Studio

데이터베이스 '{0}'이 (가) 서버에 없습니다. (SqlManagerUI)

분리하려고 할 때 분리 선택 목록에 데이터베이스가 나타나지 않습니다. "오프라인으로 가져 오기"도 위의 오류로 연결됩니다.

이것이 LocalDB의 견고한 버그라고 생각하게합니다.


EF5에서 로컬 DB를 사용하는 데 문제가 있습니다
Nikos

LocalDB는 IIS Express와 마찬가지로 관리자 권한 없이도 로컬 계정으로 실행할 수 있다는 이점이 있습니다. 이를 통해 각 개별 사용자에 대해 IIS 또는 SQL Server를 설정하지 않고도 많은 개발자와 프로젝트를 공유 할 수 있습니다.
Bart Verkoeijen 10


2

방금 해결 한 가장 쉽고 쉬운 대답, ur sql 서버 이름을 데이터 소스로 사용하고 초기 카탈로그를 데이터베이스 이름으로 사용하면 mdf 줄을 제거합니다.


1

내 경우에는 마이그레이션을 사용하고 구성에서 단순히 dataContext 및 dataContext 클래스 자체의 이름을 변경 한 다음 (이름 바꾸기 만) 다시 시도하면 도움이되었습니다.


1

SQL 2014의 경우 CodingWithSpike 선택 답변과이 의견을 따르십시오

부수적으로, v11.0은 SQL LocalDB 2012에만 해당됩니다. LocalDB 2014를 사용하는 경우 MS는 대신 MSSqlLocalDb 로 이름을 변경했습니다 . – CodingWithSpike 2009 년 8 월 29 일 19:20


도움이되는 참고 사항으로, VS 2015의 오래된 프로젝트 에서이 작업이 발생합니다 . 추가 정보 . 에서 VS 2013 년과 유사한 변화도있다 v11.0하려면 ProjectsV12 . 적어도 내 컴퓨터에서는 :-).
목표

0

같은 문제가 발생하여 "DataDirectory"폴더를 앱 바이너리의 다른 폴더로 수동 설정하여 문제를 해결했습니다.

이 줄을 Global.asax Application_Start 메서드에 넣습니다.

AppDomain.CurrentDomain.SetData("DataDirectory", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data"));

내 연결 문자열은 현재 다음과 같이 설정되어 있습니다.

<connectionStrings>
    <add name="DataContext" connectionString="Data Source=(LocalDb)\v11.0; Initial Catalog=DataContext; Integrated Security=True; MultipleActiveResultSets=True; AttachDbFilename=|DataDirectory|DataContext.mdf"
  providerName="System.Data.SqlClient" />


나는 그것을 테스트하지 않았지만 아마도 작동하지 않아야합니다. 기본적으로 DataDirectory이미 로컬 App_Data로 설정되어 있기 때문에 이전에 명시 적으로 변경하지 않으면 코드가 아무것도하지 않습니다.
Shimmy Weitzhandler

이 방법을 사용하는 경우 디렉토리를 변경하지 말고 MDF 파일 이름을 변경하십시오. 또한 romiller.com/2013/05/17/…
RickAndMSFT을

0

기본 aspnet- {numbers}에서 간단한 이름으로 연결 문자열에서 DataBase 이름을 변경하여 문제를 해결할 수있었습니다.


0

Sql Server Management Studio를 사용하여 (LocalDb) \ v11.0에 연결하고 db를 삭제 한 다음 패키지 관리자 콘솔에서 업데이트 데이터베이스를 수행하십시오.


0

나는 같은 문제가 있었다. 패키지 관리자 콘솔에서 다음 명령을 실행했는데 문제가 해결되었습니다.

sqllocaldb.exe stop MSSqlLocalDb

sqllocaldb.exe delete MSSqlLocalDb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.