문제

Since the Entity Framework creates proxy instead of providing the "original" entity classes, how do you cast a parent class to a child class? This does not work "the normal way" because the automatically created proxy classes don't use the inheritance structure of the original entity classes.

Turning off the proxy-creation feature is not an option for me.

Any help is welcome, thanks!

도움이 되었습니까?

해결책

How do you cast a parent class to a child class?

You can only cast a parent to a child if the actual runtime type is a child. That's true for non-proxies and proxies because a proxy of a child derives from a child, hence it is a child. A proxy of a parent is not a child, so you can't cast it to a child, neither can you cast a parent to a child.

For example (using DbContext API):

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

Then both the following casts will work:

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

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

And both the following won't work:

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

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

Both casts work "the normal way".

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top