2009-12-14 1 views
8

.NET 프로젝트에서 ORM을 수행하기 위해 Entity Framework를 사용하고 있습니다. 내가 직면 한 문제는 데이터베이스 스키마가 변경 될 때 edmx 파일을 업데이트 할 적절한 메커니즘이 없다는 것입니다.엔티티 프레임 워크에서 데이터베이스 스키마가 변경 될 때 가장 좋은 방법은 무엇입니까?

예를 들어 "Salary"라는 열이 있고이를 "EmpSalary"로 변경하면 Visual Studio에서 edmx를 업데이트하면 Salary 및 EmpSalary 클래스의 두 열이 표시됩니다.

내가 알아 낸 한 가지 방법은 전체 edmx 파일을 삭제하고 다시 생성하는 것입니다. 그런데 모델의 탐색 속성 이름을 수동으로 변경했다면 어떻게 될까요? 나는 그들을 잃을 것이고 나는 언제나 할 수있는 고통스러운 일인 그들을 재현해야한다.

이 분야에 대한 모범 사례가 있습니까? 내가 다시 실행 생성 과정 후 다시 적용 할 수 있도록

감사

+0

오늘 아침 나에게 일어났습니다. 나는 동료들에게 약간 미쳤다. 그래도 모범 사례인지는 모르지만 나에게 많은 도움이되지는 않았다. – Kobi

+0

EF4를 사용하고 있습니까? – ashraf

+0

@ashraf, nope. 나는 VS2008 SP1에 번들로 제공되는 EF 3.5를 추측한다. –

답변

2

EF1 디자이너에서는 "데이터베이스에서 모델 업데이트"기능이 여러 상황에서 중단되었습니다. 저는 약 1 년 동안 EF1에서 일해 왔습니다. EF1 디자이너를 사용하는 데 문제가 있으므로 필자는 EDMX XML을 직접 편집하는 것이 가장 좋습니다.

까다로운 일이라면 원하는 새 테이블/열/관계 /보기가 포함 된 새 모델을 만든 다음 XML을 새 EDMX에서 기존 XML로 복사하여 붙여 넣으십시오.

당신이

  1. 당신이 XML로 만들 수동 변경을 덮어 "데이터베이스에서 업데이트 모델"을 사용할 때 나누기 어떤 일이.
  2. 의 기본값을 처리 할 수 ​​없습니다. 엔티티가 이 default-value로 채워진 필드에 값을 제공해야한다고 주장합니다.
  3. 뷰에 대한 우스꽝스러운 복합 키 를 생성하고 보기를 수정 한 경우에도 분별 키 올바른 버전을, 그것을 의견이하고 자신의 이상한 키를 사용하여 새 버전 을 만듭니다!
  4. 는 스크래치 (예를 들어, 유니 코드, 최대 길이, FixedLength)

에서 테이블을 만들 때 좀 더있다 확신 을 설정하는 테이블에 추가 열에 대한 모든 속성을 설정하지 않습니다 , 그러나 이것은 나를 사용하기를 멈추기에 충분했다.

2

저는 업데이트에 도움이되는 몇 가지 꽤 큰 모델이 있습니다. EF v1의 "Update Model From Wizard"명령에 대해 알아 챘던 가장 중요한 것은 CSDL에서 아무 것도 삭제하지 않는다는 것입니다. SSDL은 100 % 정확할 수 있습니다 (대부분의 경우). 그래서 이것을 처리 할 수있는 두 가지 방법이 있습니다.

1) XML 변경 사항을 수정/스크립트하십시오. 2) 디자이너에서 수동으로 변경하십시오.

나는 매우 열심히 노력하여 방법 1을 작동 시키려고 노력했다. 쉽지는 않지만 기본적으로 SSDL과 CSDL 버전을 비교하면 가장 좋은 힌트가 될 것입니다.

테이블의 이름을 바꿀 때 가장 나쁜 부분이 있습니다. 그런 다음 CSDL에서 해당 테이블을 기반으로 작성된 모든 FK 관계는 기본적으로 중복됩니다 (이름 바꾸기는 실제로 삭제/작성이므로 마법사가 CSDL의 내용을 삭제하지 않습니다 :-))

따라서, 내가 가진 가장 쉬운 팁. 업데이트 마법사에서 변경하십시오. 그런 다음 .edmx 프로젝트 만 컴파일하십시오 (디자이너는 계속 열어 두십시오). 완료되면 각 오류 메시지를 두 번 클릭하고 '오류 해결'을 클릭하십시오.

오류 해결은 시나리오에 따라 다릅니다. 열이 중복 된 경우 잘못된 열 이름을 마우스 오른쪽 단추로 클릭하고 삭제를 클릭하십시오. 그것이 나쁜 FK라면, 그것을 오른쪽 클릭하고 삭제하십시오.

저는 T4 템플릿 (현재 .NET v4에서 사용하는 템플릿)을 사용하여 업데이트 마법사를 수행하려고 시도하는 사람을 기억합니다. 나는 그것이 처음 듣는 것보다 훨씬 더 까다 롭다고 생각합니다. 나는 그것을 시도했다. 그리고 내가 1 .. * * .. 1 multiplicity와 같은 시나리오에 도달했을 때, t4 생성기의 xml과 코드는 정말로 무서웠다. 그래서 대신 우리는 '오류 해결'방법을 사용합니다.