Entity Framework 용 데이터베이스를 다시 만드는 방법은 무엇입니까?


143

Code-First Entity Framework를 사용하여 ASP.Net MVC 5 프로젝트에서 상태가 좋지 않습니다. 데이터 손실에 신경 쓰지 않고 새로 시작하고 데이터베이스를 다시 만들고 Code-First 마이그레이션을 사용하고 싶습니다.

현재 Update-Database를 시도 할 때마다 예외가 발생하거나 오류 메시지가 표시되는 상태입니다. 또한 웹 사이트는 데이터베이스에 올바르게 액세스 할 수 없습니다. 새 프로젝트를 만들지 않고 모든 마이그레이션을 지우고 데이터베이스를 다시 만들고 처음부터 다시 시작하려면 어떻게해야합니까? 즉, 코드를 유지하고 데이터베이스를 삭제하려고합니다.

나중에 배포 데이터베이스 (Azure의 SQL Server)를 동기화하고 싶습니다. 다시 한 번, 모든 데이터를 삭제하지 않아도됩니다. 데이터를 작동 시키려고합니다.

깨끗한 상태로 돌아가려면 방법 단계를 제공하십시오. 매우 감사.


TBH 당신이 간단하게 원한다면 DROP DATABASE....
Worthy7

답변:


209

아래 단계를 수행하십시오.

1) 먼저 Visual Studio의 서버 탐색기로 이동하여이 프로젝트의 ".mdf"데이터 연결이 연결되어 있는지 확인하십시오. 연결되어 있으면 마우스 오른쪽 단추를 클릭하고 삭제하십시오.

솔루션 탐색기로 이동하여 모든 파일 표시 아이콘을 클릭하십시오.

3) App_Data로 이동하여 마우스 오른쪽 버튼을 클릭하고이 프로젝트의 모든 ".mdf"파일을 삭제하십시오.

4) 마우스 오른쪽 버튼을 클릭하고 삭제하여 마이그레이션 폴더를 삭제하십시오.

5) SQL Server Management Studio로 이동하여이 프로젝트의 DB가 없는지 확인하십시오. 그렇지 않으면 삭제하십시오.

6) Visual Studio에서 패키지 관리자 콘솔로 이동하여 다음을 입력하십시오.

  1. Enable-Migrations -Force
  2. Add-Migration init
  3. Update-Database

7) 응용 프로그램을 실행

참고 : 6 단계 3 단계에서 "파일을 첨부 할 수 없습니다 ..."오류가 발생하면 SQL Server에서 데이터베이스 파일을 완전히 삭제하지 않았기 때문일 수 있습니다.


우수한! 감사합니다! 정말 도움이되었습니다. 배포 데이터베이스 (Azure SQL)를 다시 만드는 단계가 비슷합니까?
Toby Sharp

안녕 @TobySharp, 문제 없습니다. 데이터베이스에 데이터가없는 경우 다음 단계를 수행 할 수 있지만 데이터가있는 경우 단계가 완전히 다릅니다.
Lin

보관해야 할 데이터가 없습니다.
Toby Sharp

3
Windows 탐색기가 아닌 VS (지시 사항대로)에서 삭제하면 업데이트됩니다. 또한 SQL Management Studio가없는 경우 VS의 Sql Object Explorer를 사용하여 localdb에서 삭제할 수 있습니다.
Mike Ward

3
"파일을 첨부 할 수 없습니다 ..."오류가 발생하면 모든 것을 삭제했다고 생각
Andy

44

Lin의 답변이 정확하다고 덧붙이고 싶습니다.

MDF를 잘못 삭제하면 수정해야합니다. 프로젝트의 나사 연결을 MDF에 고정합니다. 짧은 답변; 올바르게 다시 작성하고 삭제하십시오.

  1. 새 MDF를 작성하고 이전 MDF와 동일한 이름을 지정하고 동일한 폴더 위치에 두십시오. 새 프로젝트를 만들고 새 mdf를 만들 수 있습니다. mdf는 삭제하려고했기 때문에 이전 테이블과 일치하지 않아도됩니다. 따라서 오래된 폴더를 만들거나 올바른 폴더에 복사하십시오.
  2. 서버 탐색기에서여십시오 [솔루션 탐색기에서 mdf를 두 번 클릭하십시오]
  3. 서버 탐색기에서 삭제
  4. 솔루션 탐색기에서 삭제
  5. 실행 update-database -force [필요한 경우 힘을 사용하십시오]

완료, 새로운 DB를 즐기십시오

업데이트 11/12/14-나는 주요 DB 변경을 할 때 이것을 항상 사용합니다. 이것이 마이그레이션을 원본 DB로 롤백하는 좋은 방법이라는 것을 알았습니다.

  • db를 원래대로 되돌립니다.
  • 일반 마이그레이션을 실행하여 현재로 되 돌리십시오.

    1. Update-Database -TargetMigration:0 -force [이로 인해 모든 테이블과 모든 데이터가 삭제됩니다.]
    2. Update-Database -force [필요한 경우 사용 힘]

1
도움을 주셔서 감사합니다 ... 답변을 업데이트하겠습니다. 최근에 모든 변경 사항을 롤백하는 더 좋은 방법을 찾았습니다.
Steve Coleman

8

이것은 나를 위해 일했다 :

  1. Visual Studio의 SQL Server 개체 탐색기에서 데이터베이스를 삭제하십시오. 마우스 오른쪽 버튼을 클릭하고 삭제를 선택하십시오.
  2. 파일 시스템에서 mdf 및 ldf 파일을 삭제하십시오 (아직있는 경우).
  3. 솔루션을 다시 빌드하십시오.
  4. 응용 프로그램 시작-데이터베이스가 다시 작성됩니다.

1
예, MDF를 삭제하고 web.config에서 연결 문자열을 업데이트 한 다음 응용 프로그램을 실행하고 새 계정을 등록하기 만하면됩니다. 새로운 데이터베이스에서 모든 테이블을 자동으로 다시 생성했습니다.
Dan Bechard

3

이 질문은 데이터를 신경 쓰지 않음으로써 전제되지만 때로는 데이터 유지 관리가 필수적입니다.

그렇다면 데이터베이스에 이미 같은 이름의 테이블이있을 때 Entity Framework 악몽에서 복구하는 방법에 대한 단계 목록을 작성했습니다. Entity Framework 악몽 에서 복구하는 방법-데이터베이스에 이미 같은 이름의 테이블이 있습니다.

분명히 ... 중재자가 게시물을 삭제하기에 적합하므로 여기에 붙여 넣을 것입니다.

Entity Framework 악몽에서 복구하는 방법-데이터베이스에 이미 동일한 이름의 테이블이 있습니다.

설명 : 팀이 EF를 처음 접했을 때 우리와 같다면 새 로컬 데이터베이스를 만들 수 없거나 프로덕션 데이터베이스에 업데이트를 적용 할 수없는 상태가됩니다. 깨끗한 EF 환경으로 돌아간 다음 기본 사항을 고수하고 싶지만 할 수는 없습니다. 프로덕션 환경에서 작동하게되면 로컬 DB를 만들 수 없으며 로컬 환경에서 작동하면 프로덕션 서버가 동기화되지 않습니다. 마지막으로 프로덕션 서버 데이터를 삭제하고 싶지 않습니다.

증상 : 생성 스크립트를 실행하려고하는데 데이터베이스에 이미 같은 이름의 테이블이 있으므로 Update-Database를 실행할 수 없습니다 .

오류 메시지 : System.Data.SqlClient.SqlException (0x80131904) : 데이터베이스에 ''라는 이름의 개체가 이미 있습니다.

문제 배경 : EF는 dbo .__ MigrationHistory라는 데이터베이스의 테이블을 기반으로 코드가있는 위치와 현재 데이터베이스의 위치를 ​​이해합니다. 마이그레이션 스크립트를 볼 때 스크립트와 함께 마지막 위치를 재조정하려고합니다. 그것이 가능하지 않다면, 순서대로 적용하려고 시도합니다. 즉, 초기 작성 스크립트로 돌아가서 UP 명령의 첫 번째 부분을 보면 오류가 발생한 테이블의 CreeateTable이됩니다.

이것을 더 자세히 이해하려면 여기에 언급 된 두 비디오를 모두 보는 것이 좋습니다. https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx

솔루션 : 우리가해야 할 일은 이러한 CreateTable 명령을 적용하지 않고 현재 데이터베이스가 최신 상태라고 생각하도록 EF를 속이는 것입니다. 동시에, 우리는 여전히 새로운 로컬 데이터베이스를 만들 수 있도록 이러한 명령이 존재하기를 원합니다.

1 단계 : 프로덕션 DB 정리 먼저 프로덕션 DB를 백업합니다. SSMS에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 "작업> 데이터 계층 응용 프로그램 내보내기 ..."를 선택하고 지시를 따릅니다. 프로덕션 데이터베이스를 열고 dbo .__ MigrationHistory 테이블을 삭제 / 삭제하십시오.

2 단계 : 로컬 환경 정리 마이그레이션 폴더를 열고 삭제하십시오. 필요한 경우 git 에서이 모든 것을 다시 얻을 수 있다고 가정합니다.

3 단계 : 초기 다시 작성 패키지 관리자에서 "Enable-Migrations"를 실행하십시오 (여러 컨텍스트가있는 경우 EF는 -ContextTypeName을 사용하도록 프롬프트합니다). "Add-Migration Initial -verbose"를 실행하십시오. 현재 코드를 기반으로 처음부터 데이터베이스를 작성하는 초기 스크립트를 작성합니다. 이전 Configuration.cs에 시드 작업이있는 경우 시드 작업을 복사하십시오.

4 단계 : EF 트릭 이 시점에서 Update-Database를 실행 하면 원래 오류가 발생합니다. 따라서 이러한 명령을 실행하지 않고 EF가 최신 상태라고 생각하도록 속 여야합니다. 방금 생성 한 초기 마이그레이션에서 Up 메소드로 이동하여 주석 처리하십시오.

5 단계 : 데이터베이스 업데이트 Up 프로세스에서 실행할 코드가 없으면 EF는이 스크립트를 올바르게 실행했다고 말하는 올바른 항목이있는 dbo .__ MigrationHistory 테이블을 만듭니다. 원하는 경우 가서 확인하십시오. 이제 해당 코드의 주석을 해제하고 저장하십시오. EF가 최신 상태인지 확인 하려면 Update-Database를 다시 실행할 수 있습니다 . 이미 완료했다고 생각하기 때문에 모든 CreateTable 명령으로 Up 단계를 실행하지 않습니다.

6 단계 : EF가 실제로 최신 상태인지 확인 아직 마이그레이션을 적용하지 않은 코드가있는 경우이 작업을 수행했습니다.

"Add-Migration MissingMigrations"를 실행합니다. 실제로 빈 스크립트가 생성됩니다. 코드가 이미 존재했기 때문에 초기 마이그레이션 스크립트에서 이러한 테이블을 작성하는 올바른 명령이 실제로 있었으므로 CreateTable 및 이와 동등한 삭제 명령을 Up 및 Down 메소드로 잘라 냈습니다.

이제 Update-Database를 다시 실행하고 새 마이그레이션 스크립트를 실행하여 데이터베이스에 적절한 테이블을 작성하십시오.

7 단계 : 재확인 및 커밋 빌드, 테스트, 실행 모든 것이 실행 중인지 확인한 다음 변경 사항을 커밋하십시오.

8 단계 : 팀원들에게 진행 방법을 알려주십시오. 다음 사람이 업데이트 할 때 EF는 이전에 실행 한 스크립트가 존재하지 않으면 어떤 공격이 발생했는지 알 수 없습니다. 그러나 로컬 데이터베이스를 날려 버리고 다시 만들 수 있다고 가정하면 이것으로 충분합니다. 로컬 데이터베이스를 삭제하고 EF에서 다시 작성해야합니다. 로컬 변경 및 보류중인 마이그레이션이있는 경우 마스터에서 DB를 다시 작성하고 기능 분기로 전환 한 후 마이그레이션 스크립트를 처음부터 다시 작성하는 것이 좋습니다.


1

@Lin의 훌륭한 답변에 추가하고 싶습니다.

5) B. SQL Management Studio가없는 경우 "SQL Server 개체 탐색기"로 이동하십시오. localdb "SQL Server Object Explorer"에서 프로젝트 데이터베이스를 볼 수 없으면 "SQL 서버 추가"버튼을 클릭하여 목록에 수동으로 추가하십시오. 그런 다음 목록에서 db를 삭제할 수 있습니다.


답변에 무언가를 추가하려면 새 답변을 게시하지 말고 답변에 의견을 추가하십시오.
Oliver

1
나는 그것을 몰랐다. 따라서 이제 답변으로 의견을 이동하고 기술적으로이 질문에 대한 (완전한) 답변이 아니기 때문에이 답변을 삭제할 수 있습니다.
Oliver

0

나를 위해 일한 매우 간단한 수정이 가능합니다. server / serverobject explorer에서 찾은 데이터베이스 참조 및 연결을 삭제 한 후 App_Data 폴더를 마우스 오른쪽 단추로 클릭하고 (응용 프로그램 내에 오브젝트가 표시되지 않음) open을 선택하십시오. 일단 열면 모든 데이터베이스 등을 넣으십시오. 백업 폴더에 파일이 있거나 내장이 있으면 삭제하십시오. 응용 프로그램을 실행하면 모든 것을 처음부터 다시 만들어야합니다.


0

내 솔루션이 가장 적합합니다 :
-mdf 파일을 삭제했습니다-db
를 다시 만들고 싶습니다.

데이터베이스다시 만들려면 Visual Studio를 사용하여 연결을 추가해야합니다.

1 단계 : 서버 탐색기로 이동하여 새 연결 추가 (또는 데이터베이스 추가 아이콘 찾기)

2 단계 : 데이터 소스Microsoft SQL Server 데이터베이스 파일로 변경 합니다.

3 단계 : 데이터베이스 파일 이름 필드에 원하는 데이터베이스 이름을 추가하십시오 (바람직하게는 web.config AttachDbFilename 속성 에있는 것과 동일한 이름 ).

4 단계 : 찾아보기를 클릭하고 원하는 위치로 이동합니다.

5 단계 : 패키지 관리자 콘솔 실행 명령update-database

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