2011-10-17 3 views
0

'엔티티 유형 [유형]이 현재 컨텍스트에 대한 모델의 일부가 아닙니다.'라는 예외가 발생합니다. 내 응용 프로그램을 실행하려고 할 때.엔티티 프레임 워크 코드 먼저 엔티티를 가리 킵니다

나의 가장 좋은 추측은 내 유형을 매핑 한 유형으로 인식하지 못한다는 것입니다. 이는 런타임에로드되는 유형이므로 매우 유용 할 수 있습니다. 이 유형은 다른 어셈블리에서 가져옵니다.

EF : CF는 매핑 할 엔터티를 어떻게 찾으며 내 유형을 찾을 수 있습니까?

+0

런타임에로드되는 타입이 무엇을 의미합니까? –

+0

형식이 현재 어셈블리에는 없지만 런타임에로드됩니다. 더 자세히 알려면 Reflection.Emit을 통해 생성됩니다. – Tommy

답변

0

EF는이 기능을 직접 지원하도록 설계되지 않았습니다. EF는 ORM이며 ORM은 주로 디자인 타임에 사용하고 매핑 할 유형을 지정하고 런타임에 사용하기 만하면 목적을 위해 만들어집니다. 런타임에 (코드 매핑을 사용하여) 유형을 만들 수 없다는 의미는 아니지만 훨씬 더 복잡합니다.

컨텍스트는 매핑해야하는 모든 유형과 매핑에 대해 알아야합니다. 새로운 유형에 대한 참조가없는 컨텍스트를 작성하는 경우 컨텍스트를 알 수 없습니다. 그것을 해결하는 방법? 뿐만 아니라

  • 방출 컨텍스트 코드와 방출 컨텍스트 코드가 커스텀 매핑을 지정합니다 (기본 매핑 규칙을 사용하는) 또는뿐만 아니라 OnModelCreating 방법을 방출 형 DbSet<YourEmittedEntityType>의 공공 재산이 포함되어 있는지 확인하십시오 : 나는 두 가지 옵션에 대해 생각할 수 있습니다.
  • 새 엔티티에 대한 구성 (EntityTypeConfiguration<YourEmittedEntityType>에서 파생 됨) 클래스를 내 보냅니다. 이 클래스는 데이터베이스 테이블에 새로운 엔티티의 매핑을 지정합니다. 구성이 끝나면 수동으로 DbModelBuilder을 작성하여 런타임에 작성된 새 엔티티 유형 구성을 등록하고 DbModel을 빌드하고 컴파일 한 후 DbCompiledModel을 사용하여 DbContext의 새 인스턴스를 구성 할 수 있습니다. 건설에 시간이 많이 걸리기 때문에 사용자에게 캐시 후속 사용을 위해 DbCompiledModel을 사용하게하십시오.

두 경우 모두 새 항목을 유지하고 검색하는 데 사용되는 테이블이 이미 만들어 졌는지 확인하고 데이터베이스 이니셜 라이저를 해제하십시오. 데이터베이스를 수동으로 유지 관리해야합니다.

물론 이것은 첫 번째 단계 일뿐입니다. 이제 새로운 엔티티와 컨텍스트를 사용할 코드를 생성/생성해야합니다. EF는 인터페이스에서 작동하지 않으며 상속은 특수하게 처리되므로 대부분의 시나리오에서 방출 된 유형을 직접 사용하는 코드가 필요합니다.

+0

저는 EntityFramework Code First에 내 타입을 말할 수있을 것이라고 생각했습니다. 내가 할 수없는 이상한 것 같다. 코드는 '정상'유형을 발견하고 등록해야하기 때문에 거기에 있습니다. 당신은 여분의 타입을 등록 할 수 있다고 생각할 것이고, EF : CF가 나머지를 처리하도록 할 것입니다. 정보 주셔서 감사합니다! – Tommy

관련 문제