2012-03-26 4 views
5

엔티티 데이터 모델을 만들고이를 생성했습니다.C#에서 Entity Framework에 의해 생성 된 클래스에서 파생

엔티티 중 하나는 Template입니다.

Template의 기능을 확장하기 위해 부분 클래스를 작성하는 것이 좋습니다. 나는 새로운 클래스를 생성하고 Template에서 파생하려고하면

, 내가 인스턴스에 런타임 예외를 얻을 :

Mapping and metadata information could not be found for EntityType 'Template001'합니다.

어떻게 해결할 수 있습니까? 확실히 EF 수업을 상속해야합니다.

편집

가능한 것 같지 않습니다. 그렇다면 다음 요구 사항을 구현하는 가장 좋은 방법은 무엇입니까? 템플릿 엔터티는 각자 자신의 코드를 실행하는 템플릿에 대한 정보를 저장합니다. 그래서 내가 처음 엔 엔티티에서 파생하려고했습니다.

+0

[this] (http://stackoverflow.com/questions/2350514/ef-mapping-and-metadata-information-could-not-be-found-for-entitytype-error)와 [this] (http://stackoverflow.com/questions/2247891/metadata-information-not-found-while-using-ef4s-poco-template) SO 질문. – Attila

+0

"자신의 코드"의 종류를 염두에 두어야하며, EF는 모든 데이터베이스에있는 경우 context.Template1s.Load()와 context.Template2s.Load()의 차이점을 어떻게 이해해야합니까? '템플릿'? 이것을 어떻게 사용할 것인지 예를 들어 주시겠습니까? – hvd

+0

@Attila : 감사합니다. 첫 번째 링크는 부분적으로 클래스에서 사용하고있는 Enum을 지원하지 않는 EF를 언급했지만 제거하는 것은 Enum도 작동하지 않았습니다. 지금까지 구성을 제외하고는 해결책이없는 것 같습니다. 이견있는 사람? –

답변

4

먼저 엔티티 클래스에서 상속해야하는 이유는 무엇입니까? 간단한 동작을 추가하려면 부분 클래스를 사용하십시오.

업데이트 : 의견에 따르면 시간이 지나면 동작이 확장 될 수있는 것으로 보입니다. 이 경우에는 상속이 아니라 구성/집계를 사용하는 것이 좋습니다. 확장해야 할 클래스가 필드로 엔티티를 갖도록합니다. Raheel의 시나리오에서는 템플릿 유형의 필드/속성과 함께 TemplateLogic이라는 클래스가됩니다.

+0

시나리오는 설명하기 어렵지만 기본적으로 파생 된 각 클래스는 시간이 지남에 따라 코드 기반에 추가되는 사용자 지정 기능을 구현합니다. 엔티티 자체는 단순히 어떤 종류의 파생 된 클래스가 처리에 사용되어야하는지 저장한다. –

+4

그런 다음 단순히 상속이 아닌 합성을 사용하십시오. 확장해야 할 클래스에 필드가있는 엔티티가 있다고합시다. 시나리오에서는 Template 유형의 필드/특성을 사용하여 TemplateLogic이라는 클래스를 갖게됩니다. 감사합니다. –

+0

. 이렇게하면 코드가 조금 복잡해 지지만 확실히 작동합니다. 나는 곧 상속에서 답을 찾지 못하면 끝낼 것입니다. –

5

지원되지 않습니다. 엔티티에서 새 유형을 파생시킬 수없고 지속성을 위해 매핑 된 엔티티 유형 대신이 유형을 사용할 수 없습니다. 엔티티에서 파생 클래스를 가져 오려면 모든 자식이 데이터베이스에 매핑되는 매핑 된 상속을 사용해야합니다.

+0

파생 클래스는 지속성에 사용되지 않으므로 매핑 할 수 없습니다. 기본 엔티티 데이터에 따라 함수를 구현하기 위해 생성됩니다. –

+0

아니요 이렇게하면 작동하지 않습니다. 엔티티를 파생시키고 데이터베이스에서 데이터를 가져 오거나 데이터베이스에 데이터를 저장하는 데 사용하면 엔티티가 지속성에 사용되므로 파생 클래스도 매핑해야합니다. 매핑 할 수 없다면 상속이 잘못 사용되고 @Sergey에서 제안한대로 구성을 사용해야 함을 의미합니다. –