programing

엔티티 프레임워크용 데이터베이스를 재생성하는 방법

i4 2023. 3. 17. 19:36
반응형

엔티티 프레임워크용 데이터베이스를 재생성하는 방법

ASP 상태가 안 좋아졌어요.코드 우선 엔티티 프레임워크를 사용한 Net MVC 5 프로젝트.데이터 손실은 상관없습니다.새로 시작하고 데이터베이스를 다시 만들고 Code-First 마이그레이션을 사용할 수 있으면 좋겠습니다.

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

나중에 배포 데이터베이스(Azure의 SQL Server)도 동기화하고 싶습니다.다시 말씀드리지만, 저는 모든 데이터를 폐기하는 것에 개의치 않습니다.그냥 일을 하고 싶을 뿐입니다.

깨끗한 상태로 돌아가기 위한 방법을 알려주세요.대단히 감사합니다.

다음의 순서에 따릅니다.

1) 먼저 Visual Studio의 Server Explorer에 접속하여 이 프로젝트의 ".mdf" Data Connections가 연결되어 있는지 확인합니다.연결되어 있는 경우 우클릭 후 삭제합니다.

2) Solution Explorer로 이동하여 [모든 파일 표시]아이콘을 클릭합니다.

3) App_Data에서 마우스 오른쪽 버튼을 클릭하여 이 프로젝트의 모든 ".mdf" 파일을 삭제합니다.

4) [Migrations]폴더를 오른쪽 클릭하여 삭제합니다.

5) SQL Server Management Studio로 이동하여 이 프로젝트의 DB가 없는지 확인하고, 그렇지 않으면 삭제합니다.

6) Visual Studio의 Package Manager Console로 이동하여 다음과 같이 입력합니다.

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

7) 어플리케이션 실행

주의: 스텝 6 파트 3에서 "Cannot attach the file..."이라는 오류가 발생할 경우 SQL Server에서 데이터베이스 파일을 완전히 삭제하지 않았기 때문일 수 있습니다.

린의 답변이 맞다는 것을 덧붙이고 싶습니다.

MDF를 잘못 삭제하면 수정해야 합니다.MDF에 대한 프로젝트 내 잘못된 연결을 수정하기 위해 짧은 답변. 다시 만들고 적절하게 삭제하십시오.

  1. 새 MDF를 생성하여 이전 MDF와 동일한 이름을 지정하고 동일한 폴더 위치에 배치합니다.새 프로젝트를 생성하고 새 mdf를 생성할 수 있습니다.mdf는 삭제할 예정이었기 때문에 오래된 테이블과 일치할 필요는 없습니다.따라서 이전 폴더를 만들거나 올바른 폴더에 복사합니다.
  2. 서버 탐색기에서 열기 [솔루션 탐색기에서 mdf를 더블 클릭]
  3. 서버 탐색기에서 삭제
  4. 솔루션 탐색기에서 삭제
  5. 려려를 update-database -force에 따라 ★★★★★★★★★★★★★★★★★★★」

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

UPDATE 11/12/14 - Breaking DB를 변경할 때 항상 사용합니다.이 방법은 원래 DB로의 이행을 롤백하는 데 매우 적합합니다.

  • DB를 원래대로 되돌립니다.
  • 일반 마이그레이션을 실행하여 최신 상태로 되돌립니다.

    1. Update-Database -TargetMigration:0 -force[아까부터]
    2. Update-Database -force한 경우 요에에 따력력]]력 ]

이 방법은 효과가 있었습니다.

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

이 질문은 데이터에 관심이 없다는 전제 하에 이루어지지만, 때로는 데이터의 유지보수가 필수적입니다.

그렇다면 데이터베이스에 같은 이름의 테이블이 이미 있는 경우의 엔티티 프레임워크 악몽에서 회복하는 방법에 대한 절차를 여기에 기재했습니다.엔티티 프레임워크 악몽에서 복구하는 방법 - 데이터베이스에 동일한 이름의 테이블이 이미 있습니다.

듣자하니...모델레이터가 내 게시물을 삭제하려고 했으므로 여기에 붙여넣습니다.

엔티티 프레임워크 악몽에서 복구하는 방법 - 데이터베이스에 동일한 이름의 테이블이 이미 있습니다.

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

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

오류 메시지:시스템.Data.SqlClient.Sql Exception (0x80131904) :데이터베이스에 이름이 "인 개체가 이미 있습니다.

문제 배경: EF는 dbo라는 데이터베이스 내의 테이블을 기반으로 코드가 어디에 있는지와 비교하여 현재 데이터베이스의 위치를 파악합니다.__이행역사.이행 스크립트를 확인할 때 스크립트로 마지막 위치를 다시 고려하려고 합니다.사용할 수 없는 경우 순서대로 적용하려고 합니다.즉, 초기 작성 스크립트로 돌아가 UP 명령어의 첫 번째 부분을 보면 오류가 발생한 테이블의 CriateTable이 됩니다.

자세한 것은, https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx 를 참조해 주세요.

솔루션:이러한 CreateTable 명령어를 적용하지 않고 EF가 현재 데이터베이스가 최신 상태라고 생각하게 해야 합니다.동시에 새로운 로컬 데이터베이스를 작성할 수 있도록 이러한 명령어가 존재하기를 원합니다.

순서 1: 실가동 DB를 정리하고 먼저 실가동 DB를 백업합니다.SSMS에서 데이터베이스를 오른쪽 클릭하여 [태스크(Tasks)]> [데이터 계층 응용 프로그램 내보내기(Export Data-tier Application)]를 선택합니다.프롬프트에 따릅니다.프로덕션 데이터베이스를 열고 dbo를 삭제/폐기합니다.__이행이력표

2단계: 로컬 환경 청소 마이그레이션 폴더를 열고 삭제합니다.필요하다면 이 모든 걸 git에서 돌려받을 수 있을 거야

순서 3: 초기 재작성 패키지 매니저에서 "Enable-Migrations(이행 활성화)"를 실행합니다(여러 컨텍스트가 있는 경우 -ContextTypeName을 사용하라는 메시지가 표시됩니다)."Add-Migration Initial -verbose"를 실행합니다.현재 코드를 기반으로 데이터베이스를 처음부터 작성하는 초기 스크립트를 만듭니다.이전 Configuration.cs 에서 시드 조작이 있었을 경우는, 그 사이에 카피합니다.

4단계: EF의 속임수 이 시점에서 Update-Database를 실행하면 원래 오류가 발생합니다.따라서 이러한 명령을 실행하지 않고 EF가 최신 상태라고 생각하게 해야 합니다.방금 작성한 초기 이행에서 Up 메서드로 이동하여 모두 코멘트합니다.

5단계: 데이터베이스 업데이트 Up 프로세스에서 실행할 코드가 없으면 EF가 dbo를 만듭니다.__이행이 스크립트를 올바르게 실행했음을 나타내는 올바른 엔트리가 있는 이력 테이블.괜찮으시다면 가서 확인해 보세요.이제 코드를 풀고 저장하세요.EF가 최신 상태인지 확인하려면 Update-Database를 다시 실행할 수 있습니다.이미 실행했다고 생각하기 때문에 모든 CreateTable 명령에서 Up 스텝은 실행되지 않습니다.

6단계: EF가 실제로 최신 상태인지 확인합니다. 아직 마이그레이션이 적용되지 않은 코드가 있는 경우 다음과 같이 처리했습니다.

"Add-Migration Missings"를 실행합니다. 그러면 사실상 빈 스크립트가 생성됩니다.코드가 이미 존재했기 때문에 초기 이행 스크립트에는 이러한 테이블을 작성하기 위한 올바른 명령어가 실제로 존재하기 때문에 CreateTable 및 이와 동등한 드롭 명령어를 Up 및 Down 메서드로 잘라냈습니다.

이제 Update-Database를 다시 실행하여 새 마이그레이션 스크립트가 실행되고 데이터베이스에 적절한 테이블이 생성되는 것을 확인합니다.

스텝 7: 다시 확인하고 커밋합니다.빌드, 테스트, 실행.모든 것이 실행되고 있는지 확인하고 변경을 커밋합니다.

스텝 8: 다른 팀원들에게 진행 방법을 알려줍니다.다음 사용자가 업데이트하면 이전에 실행한 스크립트가 존재하지 않기 때문에 EF는 어떤 영향을 받았는지 알 수 없습니다.그러나 로컬 데이터베이스를 삭제하고 다시 만들 수 있다고 가정하면 이 모든 것이 좋습니다.로컬 데이터베이스를 삭제하고 EF에서 다시 생성해야 합니다.로컬 변경과 이행 보류 중인 경우 마스터에서 DB를 다시 생성하고 기능 브랜치로 전환하여 이행 스크립트를 처음부터 다시 작성할 것을 권장합니다.

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

5) B. SQL Management Studio가 없는 경우 "SQL Server Object Explorer"로 이동합니다.localdb "SQL Server Object Explorer"에 프로젝트 DB가 표시되지 않으면 "Add SQL Server" 버튼을 클릭하여 수동으로 목록에 추가합니다.그런 다음 목록에서 db를 삭제할 수 있습니다.

아주 간단한 해결책이 나한테 효과가 있었어서버/서버 오브젝트 탐색기에서 찾은 데이터베이스 참조 및 연결을 삭제한 후 App_Data 폴더(애플리케이션 내 개체를 표시하지 않음)를 마우스 오른쪽 버튼으로 클릭하고 open을 선택합니다.열리면 모든 데이터베이스/등 파일을 백업 폴더에 넣거나 삭제하기만 하면 됩니다.애플리케이션을 실행하면 모든 것이 처음부터 다시 작성됩니다.

내 솔루션은 다음 작업에 가장 적합합니다.
- mdf 파일을 삭제했습니다.
DB를 만듭니다.

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

순서 1: Server Explorer에서 새 연결을 추가합니다(또는 추가 DB 아이콘을 찾습니다).

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

스텝 3 : [Database file name]필드에 원하는 데이터베이스 이름을 추가합니다.(web.config AttachDbFilename Atribut과 같은 이름이 바람직합니다.)

스텝 4 : [Browse]를 클릭하여 원하는 위치로 이동합니다.

순서 5 : package manager console run 명령어update-database

언급URL : https://stackoverflow.com/questions/20304058/how-to-re-create-database-for-entity-framework

반응형