asp.net实体框架:继承代理的转换

avelit 发布于 2019-03-09 asp.net 最后更新 2019-03-09 14:35 6 浏览

由于实体框架创建代理而不是提供“原始”实体类,因此如何将父类转换为子类? 这不是“正常的方式”,因为自动创建的代理类不使用原始实体类的继承结构。 关闭代理创建功能对我来说不是一种选择。 欢迎任何帮助,谢谢!

已邀请:

oqui

赞同来自:

How do you cast a parent class to a child class?
如果实际运行时类型是子级,则只能将父级转换为子级。这对于非代理和代理来说是正确的,因为子元素的代理来自子元素,因此它是子元素。父级的代理人不是子元素,因此您不能将其投射给子元素,也不能将父级投射给子元素。 例如(使用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
两个演员都是“正常的方式”。