0

由于实体框架创建代理而不是提供“原始”实体类,您如何将父类转换为子类?这不是“正常方式”,因为自动创建的代理类不使用原始实体类的继承结构。

关闭代理创建功能对我来说不是一个选项。

欢迎任何帮助,谢谢!

4

1 回答 1

0

如何将父类转换为子类?

如果实际运行时类型是子级,则只能将父级强制转换为子级。对于非代理和代理来说都是如此,因为子代的代理源自子代,因此它子代。父母的代理不是孩子,因此您不能将其投射给孩子,也不能将父母投射给孩子。

例如(使用DbContextAPI):

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

然后以下两种演员都将起作用:

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

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

以下两项都不起作用:

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

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

两种演员都以“正常方式”工作。

于 2013-04-11T17:37:26.257 回答