2011-05-11 3 views
3

프로덕션 환경에서 처음으로 Entity Framework 코드를 사용하고 있습니다. DB를 가져 와서 데이터의 일부를 넣은 다음 필드 길이를 변경해야했던 다른 위치에서 가져온 데이터를 가져 오기 전까지는 아무 문제가 없었습니다. 그래서 우리는 nvarchar (50) 대신 nvarchar (99) 필드 중 일부를 만들었습니다.모델을 실현하는 엔티티 프레임 워크와 DB를 얻는 방법은 동기화되어 있습니다.

괜찮 았는데 응용 프로그램은 여전히 ​​작동하지만 데이터 주석을 변경해야한다는 것을 알았거나 나중에로드되어 너무 긴 필드를 저장하려고했을 때 폭발하게됩니다. 내가 그랬을 때 응용 프로그램은 비록 모델과 DB가 일치하더라도 폭발했다. 그래서 나는 그것이 메타 데이터 테이블의 해시라고 생각하여 영리하고 새로운 DB를 만들고 거기에서 해시를 가져 와서 복사한다고 생각했습니다. 그건 작동하지 않았고 실제로 지금 내 애플 리케이션이 우리가 데이터를 전혀 가지고 있지 않은 테스트 DB에 연결할 수는 없다.

이 데이터베이스를 삭제하고 다시 만들고 싶지 않습니다. 엔티티 프레임 워크가 모델과 스키마가 실제로 일치한다는 것을 깨닫기를 원합니다. 이 일을 할 수있는 방법이 있습니까? 또한이 모델로 생성 된 엔티티 프레임 워크가 작동하지 않는 DB에서 메타 데이터를 복사 한 이유는 무엇입니까?

+0

동일한 데이터베이스 서버에 있습니까? 동일한 버전의 데이터베이스 서버가 아닌 경우? –

+0

당신은 "앱이 폭발했다"고 말할 때 무슨 뜻인지 분명히 할 수 있습니까? 우리에게 그다지 많은 것을주지 않습니다. –

답변

1

Entity Framework 코드 첫째는 EdmMetadata 테이블을 만들고 여기에 모델 클래스의 해시를 저장합니다. 모델에서 무언가를 변경하면 새로운 모델 클래스의 해시는 더 이상 EdmMetadata 테이블의 내용과 일치하지 않으며 런타임에 앱이 "폭발"해야합니다. 같은 데이터베이스를 삭제하지 않고 계속 사용하려면 EdmMetadata 테이블을 삭제해야합니다. 이렇게하면 EF는 해당 검사를 수행하지 않고 DB에 대한 액세스를 시도합니다.

이 부분을 확인하십시오 ("클래스 변경시 8시 10 분 섹션"으로 건너 뛰십시오).

+0

그 부분을 이해합니다. 응용 프로그램이 서버의 다른 곳에서 새 DB를 만들고 메타 데이터를 복사하도록 만들었지 만 배후에서 진행되는 모델을 해싱하는 것 이상의 것이 나왔다. 메타 데이터 테이블을 삭제하려고 시도했는데 앱이 지금 시작되어서 내가 가진 많은 관계를 액세스하려고 시도 할 때까지 불평하지 않습니다. 이제 오류 얻을 - { ". 명령 정의를 실행하는 동안 오류가 발생했습니다 자세한 내용은 내부 예외를 참조하십시오."} $ 예외 \t을 내부 예외 중 - \t \t의 InnerException \t { "잘못된 개체 이름 'dbo.GroupPersons' "} –

+0

아마도 모델 클래스를 해시 할 때 어떤"마술 "이 일어나고 있을지 모르겠다. 그 오류는 아마도 DB와 일치하지 않는 모델과 관련이 있습니다. EF가 dbo.GroupPersons라는 테이블을 기대하고 있고 DB에 그러한 테이블이없는 것 같습니다. – Farinha

0

죄송합니다. 메타 데이터 제거가 효과적입니다. 그러나 필자는 문제를 해결하려고 시도하면서 우발적으로 EntityFramework의 최신 버전으로 업데이트했으며이 최신 버전에서는 데이터베이스의 다른 명명 규칙이 필요하다고 판명되었습니다. 어떤 경우 엔 Entity Framework에 의해 생성 된 DB에서 스크립트로 다 대다 그룹 인력 테이블을 다시 만들고 메타 데이터를 삭제하면 문제가 해결되었습니다.

+0

사실 이것은 잘못되었습니다. 엔티티 프레임 워크의 새로운 버전이 아니 었습니다. (선량에게 감사합니다.) 오히려 이것은 다 - 대 - 일 관계를 정의하고 코드 EF가 다르게 예상되는 코드 없이는 주석 처리 한 코드 조각이었습니다. –

관련 문제