Entity Framework 6.1 및 MVC 5를 사용하여 데이터베이스에서 Code First를 사용한 후 모델을 동기화하는 방법은 무엇입니까?
가정
EF 6.1, MVC 5, VS 2013, C # 사용
SQL Server 용 Toad DM으로 설계된 기존 데이터베이스 모델이 있으며 항상 업데이트를 유지하는 것이 매우 중요합니다.
단계 및 참고 사항
ADO.NET 엔터티 데이터 모델 을 사용하여 모델을 생성하기 위해 데이터베이스 ( EF 6.1의 새로운 기능)에서 Code First를 선택했습니다 . 참고 : 모델 클래스 및 DbContext 클래스가 성공적으로 생성되었지만 .edmx 또는 .tt 파일이 생성되지 않았습니다 .
다음으로 Entity Framework를 사용하여 뷰가있는 MVC 5 컨트롤러라는 새 스캐 폴드 항목을 추가했습니다. 참고 : 성공, 컨트롤러 및보기 생성
질문
이제부터는 Code First를 사용하여 데이터베이스를 업데이트하고 싶지 않습니다. 대신 데이터베이스 변경에 따라 모델을 업데이트하고 싶습니다. 다음에 할일? edmx 파일이 없으면 데이터베이스에서 모델 클래스를 업데이트 할 수 없습니까?
Entity Data Model Wizard의 Code First from Database는 마치 Code First 스타일로 만들어진 것처럼 엔터티 클래스를 만드는 데 탁월한 작업을 수행합니다. 당신이 묻는 것은 EDMX 스타일 "Update Model From Database"와 유사하게 데이터베이스가 변경 될 때 이러한 클래스를 최신 상태로 유지할 수있는 방법이 있는지 여부입니다. 내가 조사한 바에 따르면 이것은 내장 도구를 사용하여 가능 하지 않습니다 . 그러나 다음은 내가 유용하다고 생각한 한 가지 해결 방법입니다.
제품 테이블과 고객 테이블이있는 데이터베이스가 있다고 가정 해 보겠습니다. 원래 StoreDBContext 클래스를 만들고 제품을 내 개체 중 하나로 선택했습니다. 이제 고객 테이블을 기존 컨텍스트에 새 엔터티로 추가하려고합니다. 코드 우선 마법사를 사용하여이 작업을 수행하는 방법은 다음과 같습니다.
- 새 엔터티 데이터 모델을 만들고 이름을 StoreDBContextTemp 등으로 지정합니다.

- 데이터베이스 마법사 옵션에서 먼저 코드를 선택하십시오.

- 추가 할 개체로 고객 선택 (고객 만) 및 마법사 완료

- 새로 생성 된 컨텍스트 파일을 열고
StoreDBContextTemp.cs새로 추가 된 엔티티의 가상 속성을 복사합니다.
public virtual DbSet<Customer> Customers {get; set;}
- 이러한 새 속성을 Original
StoreDBContext.csdbcontext 클래스에 붙여 넣습니다 . - StoreDBContextTemp.cs를 삭제하고 app.config / web.confg 등에서 StoreDBContextTemp에 대한 연결 문자열을 제거합니다.
- 이제 StoreDBContext 클래스에서 Customer를 사용할 수 있습니다.
테이블을 추가하거나 제거하는 경우 필드를 수동으로 조정해야하지만 최소한 새 테이블이 모델에 추가 될 때마다 수십 개의 속성을 직접 작성할 필요는 없습니다.
한 가지 더 옵션은 프로젝트에서 자동 생성 된 클래스를 삭제하고 다시 생성하는 것입니다. 이 접근 방식을 따르는 동안 우리는 데이터 모델 (DbContext에서 상속 된 클래스 이름)에 이전 모델과 동일한 이름을 지정해야합니다. 데이터 모델 이름은 아래 스냅에서 강조 표시됩니다.
세개.
Code First를 사용할 때는 .edmx가 없습니다.
Code First 마이그레이션을 사용하는 경우 먼저 코드를 작성하고 그 후에 변경 사항을 데이터베이스로 마이그레이션해야합니다. 이렇게하면 생성 된 코드없이 훨씬 더 체계적으로 코드를 작성할 수있는 이점이 있습니다.
반대로 Visual Studio에는 플러그인이 있습니다. Entity Framework PowerTools를 사용하면 데이터베이스를 선택하고 개체에 매핑 할 수 있습니다.
https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
Brian Vander Plaats의 답변에 추가 할 것이 하나 더 있습니다. 4 단계에서 새 StoreDBContextTemp.cs / OnModelCreating 메서드에있는 모든 항목을 복사하여 기존 StoreDBContext.cs / OnModelCreating에 추가 할 수도 있습니다. 그렇지 않으면 새 컨텍스트 클래스를 삭제할 때 이러한 구성 추가를 잃게됩니다.
'Program Club' 카테고리의 다른 글
| 일부 명령은 수퍼 유저로 실행하고 일부 명령은 수퍼 유저로 실행하지 않고 실행하는 쉘 스크립트를 작성하는 방법은 무엇입니까? (0) | 2020.12.31 |
|---|---|
| 참조 된 종속성을 포함하여 NuGet 패키지 자동 빌드 (0) | 2020.12.31 |
| 솔로 개발자를위한 최고의 연속 통합 설정 (.NET) (0) | 2020.12.31 |
| Java에서 InputStream.available ()은 무엇을합니까? (0) | 2020.12.31 |
| 쿠키가없는 PHP 세션 (0) | 2020.12.31 |
