什么可能导致实体框架抛出异常消息“(某种类型)既不是超类型也不是(某些其他类型)的子类型”?

时间:2012-06-19 22:18:03

标签: c# entity-framework entity-framework-4

我正在处理EF问题我发现很难调试...以前,我的系统中存在一个每个类型的表继承设置来管理不同的用户类型 - 所有用户共有的一种根类型,以及几种不同的子类型,大致基于使用该帐户的人的类型。现在,我遇到了一些问题,要求我删除继承,而是在每个子类上放置一个UserId属性,该子类是User的Id属性的外键。因此,现在不是用户,而是其他用户类型将具有用户导航属性。

我已经使用EDMX设计器删除了所有继承关联,我添加了所有UserId属性及其关联,确保所有其他用户类型现在都有自己的实体键,并获得了关联和导航属性用户设置每个特定的。但是,当我实际运行我的应用程序时,我收到一个TargetInvocationException,并显示消息告诉我“User既不是超类型也不是子类型(其他类型)”。

我一直在寻找对此错误消息的其他引用,现在找不到任何内容,我无法确定导致它的原因。用户和我的EDMX中的其他类型之间似乎没有更多类型的继承引用,但消息仍然存在。我认识的人从未见过它。

我确实没有任何代码供参考;这似乎是一个映射问题。有没有人在此之前看到此特定消息的异常?

1 个答案:

答案 0 :(得分:0)

事实证明,问题实际上并不是我所怀疑的EDMX内部。通常当映射存在问题时,代码将始终在同一行上爆炸,在我尝试反射实例化实体存储库的位置。由于这是抛出异常的地方,我认为这是一个映射问题,但是关闭项目的自定义错误表明,在特定存储库的构造函数内,另一个开发人员插入了对ObjectContext.CreateObjectSet<User>().OfType<(user sub-category type)>()的调用。这就是导致问题的原因。我怀疑异常没有在调试时向我显示这一行,因为存储库的构造函数是被反射调用的。更改此呼叫后,一切正常。