Program Club

Entity Framework 6.1 및 MVC 5를 사용하여 데이터베이스에서 Code First를 사용한 후 모델을 동기화하는 방법은 무엇입니까?

proclub 2020. 12. 31. 22:18
반응형

Entity Framework 6.1 및 MVC 5를 사용하여 데이터베이스에서 Code First를 사용한 후 모델을 동기화하는 방법은 무엇입니까?


가정

  • EF 6.1, MVC 5, VS 2013, C # 사용

  • SQL Server 용 Toad DM으로 설계된 기존 데이터베이스 모델이 있으며 항상 업데이트를 유지하는 것이 매우 중요합니다.

단계 및 참고 사항

  1. ADO.NET 엔터티 데이터 모델 을 사용하여 모델을 생성하기 위해 데이터베이스 ( EF 6.1의 새로운 기능)에서 Code First를 선택했습니다 . 참고 : 모델 클래스 및 DbContext 클래스가 성공적으로 생성되었지만 .edmx 또는 .tt 파일이 생성되지 않았습니다 .

  2. 다음으로 Entity Framework를 사용하여 뷰가있는 MVC 5 컨트롤러라는 새 스캐 폴드 항목을 추가했습니다. 참고 : 성공, 컨트롤러 및보기 생성

질문

이제부터는 Code First를 사용하여 데이터베이스를 업데이트하고 싶지 않습니다. 대신 데이터베이스 변경에 따라 모델을 업데이트하고 싶습니다. 다음에 할일? edmx 파일이 없으면 데이터베이스에서 모델 클래스를 업데이트 할 수 없습니까?


Entity Data Model Wizard의 Code First from Database는 마치 Code First 스타일로 만들어진 것처럼 엔터티 클래스를 만드는 데 탁월한 작업을 수행합니다. 당신이 묻는 것은 EDMX 스타일 "Update Model From Database"와 유사하게 데이터베이스가 변경 될 때 이러한 클래스를 최신 상태로 유지할 수있는 방법이 있는지 여부입니다. 내가 조사한 바에 따르면 이것은 내장 도구를 사용하여 가능 하지 않습니다 . 그러나 다음은 내가 유용하다고 생각한 한 가지 해결 방법입니다.

제품 테이블과 고객 테이블이있는 데이터베이스가 있다고 가정 해 보겠습니다. 원래 StoreDBContext 클래스를 만들고 제품을 내 개체 중 하나로 선택했습니다. 이제 고객 테이블을 기존 컨텍스트에 새 엔터티로 추가하려고합니다. 코드 우선 마법사를 사용하여이 작업을 수행하는 방법은 다음과 같습니다.

  1. 새 엔터티 데이터 모델을 만들고 이름을 StoreDBContextTemp 등으로 지정합니다. 새 항목 추가
  2. 데이터베이스 마법사 옵션에서 먼저 코드를 선택하십시오. 데이터베이스에서 먼저 코드
  3. 추가 할 개체로 고객 선택 (고객 만) 및 마법사 완료 테이블 추가
  4. 새로 생성 된 컨텍스트 파일을 열고 StoreDBContextTemp.cs새로 추가 된 엔티티의 가상 속성을 복사합니다.

public virtual DbSet<Customer> Customers {get; set;}

  1. 이러한 새 속성을 Original StoreDBContext.csdbcontext 클래스에 붙여 넣습니다 .
  2. StoreDBContextTemp.cs를 삭제하고 app.config / web.confg 등에서 StoreDBContextTemp에 대한 연결 문자열을 제거합니다.
  3. 이제 StoreDBContext 클래스에서 Customer를 사용할 수 있습니다.

테이블을 추가하거나 제거하는 경우 필드를 수동으로 조정해야하지만 최소한 새 테이블이 모델에 추가 될 때마다 수십 개의 속성을 직접 작성할 필요는 없습니다.


한 가지 더 옵션은 프로젝트에서 자동 생성 된 클래스를 삭제하고 다시 생성하는 것입니다. 이 접근 방식을 따르는 동안 우리는 데이터 모델 (DbContext에서 상속 된 클래스 이름)에 이전 모델과 동일한 이름을 지정해야합니다. 데이터 모델 이름은 아래 스냅에서 강조 표시됩니다.

데이터 모델 이름


세개.

  1. Code First를 사용할 때는 .edmx가 없습니다.

  2. Code First 마이그레이션을 사용하는 경우 먼저 코드를 작성하고 그 후에 변경 사항을 데이터베이스로 마이그레이션해야합니다. 이렇게하면 생성 된 코드없이 훨씬 더 체계적으로 코드를 작성할 수있는 이점이 있습니다.

  3. 반대로 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에 추가 할 수도 있습니다. 그렇지 않으면 새 컨텍스트 클래스를 삭제할 때 이러한 구성 추가를 잃게됩니다.

참조 URL : https://stackoverflow.com/questions/22637350/how-to-sync-model-after-using-code-first-from-database-using-entity-framework-6

반응형