0

엔터티 프레임 워크는 "원래"엔터티 클래스를 제공하는 대신 프록시를 만들기 때문에 부모 클래스를 자식 클래스로 캐스팅하는 방법은 무엇입니까? 자동 생성 된 프록시 클래스가 원래 엔터티 클래스의 상속 구조를 사용하지 않기 때문에 "정상적인 방법으로"작동하지 않습니다.asp.net 엔터티 프레임 워크 : 상속 프록시 캐스팅

프록시 만들기 기능을 해제하는 것은 나를위한 옵션이 아닙니다.

도움이되었습니다. 감사합니다.

+0

어떤 코드가 오류인지 및 수신중인 오류를 설명 할 수 있습니까? 필자는 비 프록시 프록시 객체에 프록시 객체를 전달하는 데 어떤 문제도 발생하지 않았습니다. –

+0

음 부모 - 프록시 - 개체를 자식 개체로 캐스팅하고 싶습니다. 해당 하위 프록시 클래스를 모르기 때문에 원래 자식 클래스를 사용해야합니다. 이 캐스트는 InvalidCastException이됩니다. – Cleo

+0

상속 체인은 그대로입니다. "자식"프록시 클래스가 무엇인지 알아낼 필요가 없습니다. 실수로 뭔가를하고있을 가능성이 있지만, 예제 코드가 없으면 정확히 무엇을 잘못하고 있는지 말할 수 없을 것입니다. –

답변

0

어떻게 부모 클래스를 하위 클래스로 변환합니까? 실제 실행시의 형태 아이 인 경우

당신은 단지 아이에게 부모를 캐스팅 할 수 있습니다. 이는 아동의 대리인이 아동으로부터 파생되기 때문에 비 대리인 및 대리인에게 적용됩니다. 따라서 은 어린이 인입니다. 부모의 프록시는 자식이 아니기 때문에 자식으로 캐스팅 할 수 없으므로 부모에게 자식을 캐스팅 할 수 없으며 자식은이 아닙니다.

예를 들어

(DbContext API를 사용하여) :

Parent parent1 = context.Parents.Create<Child>(); // proxy 
Parent parent2 = new Child();      // non-proxy 

Child child1 = (Child)parent1; // works 
Child child2 = (Child)parent2; // works 

을 다음과 같은 두가 작동하지 않습니다 :

public class Parent { ... } 
public class Child : Parent { ... } 

을 그런 다음 두 캐스트가 작동합니다

Parent parent1 = context.Parents.Create<Parent>(); // proxy 
Parent parent2 = new Parent();      // non-proxy 

Child child1 = (Child)parent1; // InvalidCastException 
Child child2 = (Child)parent2; // InvalidCastException 

두 형식 모두 정상적인 방식으로 작동합니다.

+0

이것은 내 문제를 설명합니다. 내가 원했던 것은 : 자식 child2 = (자식) parent2; // InvalidCastException 부모를 만들고 값을 할당 한 다음 자식이 있는지 확인하고 자식 필드를 할당 할 수 없기 때문에 이러한 종류의 작업은 복잡합니다. – Cleo

+0

@Cleo : 음, ** is ** 연산자를 사용하여 그것이 자식인지 확인할 수 있습니다 :'if (parent1 is Child) ...' – Slauma