由于实体框架创建代理而不是提供“原始”实体类,您如何将父类转换为子类?这不是“正常方式”,因为自动创建的代理类不使用原始实体类的继承结构。
关闭代理创建功能对我来说不是一个选项。
欢迎任何帮助,谢谢!
由于实体框架创建代理而不是提供“原始”实体类,您如何将父类转换为子类?这不是“正常方式”,因为自动创建的代理类不使用原始实体类的继承结构。
关闭代理创建功能对我来说不是一个选项。
欢迎任何帮助,谢谢!
如何将父类转换为子类?
如果实际运行时类型是子级,则只能将父级强制转换为子级。对于非代理和代理来说都是如此,因为子代的代理源自子代,因此它是子代。父母的代理不是孩子,因此您不能将其投射给孩子,也不能将父母投射给孩子。
例如(使用DbContext
API):
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
两种演员都以“正常方式”工作。