1

우리 조직에서는 v4가 출시되면 Entity Framework에서 표준화하려고합니다. 결과적으로 POCO 지원을 사용하여 지속성을 위해 Hibernate를 사용하는 애플리케이션을 EF4로 마이그레이션하는 데 필요한 것이 무엇인지 살펴 본다. 두 곳에서 단일 테이블 상속 (계층 구조 당 테이블이라고도 함)을 사용합니다. 나는 그것을 다음과 같이 사용해서 얻을 수 없었다.Entity Framework 4의 POCO 엔터티를 사용한 계층 구조 상속 당 표

지불 가 CreditCardPayment (구체적인 구현) ACHPayment (구체적인 구현) CheckPayment 지금 (구체적인 구현)

, 내가 그들을 매핑하고 (기본 클래스 [추상 그러나뿐만 아니라이 문제가되어야한다]) 기본 클래스 속성 만. 이러한 모든 클래스는 동일한 네임 스페이스에 있습니다. 데이터베이스에 PaymentTypeId라는 분 류자가 있으 G로 지불 맵핑에 "When PaymentTypeId = 0"조건이 있습니다. 각 하위 클래스는 동일한 값을 가진 조건이 동일합니다 (예 : CreditCardPayment = 1 등).

나는 DataContext.Payments.ToList()을 (를 DataContext가 된 ObjectContext에서 상속) 나는 다음과 같은 예외가 무엇입니까 사용하는 모든 지불의 각 목록을로드 할 때 :

"개체 매핑과 유형에 대한 찾을 수 없습니다 ID 'DataLayer.DataModel.CreditCardPayment'. "

POCO CreditCardPayment 클래스는 POCO Payment 클래스와 동일한 네임 스페이스 (실제로는 같은 파일에 있음)에 있으므로이 의미가 무엇인지 알 수 없습니다.

무엇이 누락 되었습니까?

답변

0

이전에 언급하지 않은 내용 (관련성이 있다고 생각하지는 않지만 그랬습니다). CreditCayPayment가 "CreditPayment"라는 중개 클래스에서 상속 받았으며 ACHPayment가 CashPayment에서 상속 받았습니까? CreditCardPayment와 CashPayment는 동일한 네임 스페이스와 파일에 있지만 EF 매핑에서는 표시되지 않았습니다.맵핑 파일에 추가 한 파일은 모두 정상적으로 작동했습니다.

EF가 이러한 유형 중 하나에 직접 매핑하지 않는다고 생각하더라도 CreditCardPayment 클래스의 기본 유형을 변경하기 때문에 EF가 해당 유형에 대해 알아야 할 것 같습니다. 이것에 대한 당신의 도움에 감사드립니다.

3

이것은 데이터베이스 매핑이 아니라 모델을 CLR 매핑이라고 불평합니다.

EF는 어떤 이유로 든 CreditCardPayment 클래스를 찾을 수 없습니다.

한 가지 가능한 이유는 아직 메타 데이터를로드하지 않았기 때문입니다. 당신이가 CreditCardPayment이 사는 곳 EF 모르는 쿼리 할 때 다음

Assembly 1: 
- Payment 

Assembly 2 references Assembly 1: 
- CreditCardPayment extends Payment 

: 예를 들어

당신이있는 경우.

이 주위에 얻을 수있는 방법은 LoadAssembly 즉 함께 :

using (DataContext ctx = new DataContext()) 
{ 
    ctx.MetadataWorkspace.LoadFromAssembly(typeof(CreditCardPayment).Assembly); 

    // now do your query. 

} 

당신은 LoadFromAssembly에 직접 DataContext 클래스에서 참조 할 때마다 어셈블리를 알 필요가있다.

참고 : typeof(Payment).AssemblyIQueryable<Payment> Payments 속성으로 인해 직접 참조됩니다.

희망이

알렉스

마이크로 소프트를하는 데 도움이됩니다.

+0

감사합니다. Alex. 내 DataContext 클래스의 생성자에서 "this.MetadataWorkspace.LoadFromAssembly (typeof (CreditorCardPayment) .Assembly);" "_payments = CreateObjectSet ();" 그러나 "개체 매핑을 찾을 수 없습니다. 유형 ..."오류가 남아 있습니다. 이들은 POCO 클래스 (Payment 및 CreditorCardPayment)이며, 여기서해야 할 일을 변경합니다. – SteveBering

관련 문제