2

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

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

我一直在寻找有关此错误消息的其他引用,但找不到任何东西,而且我无法确定是什么原因造成的。在我的 EDMX 中,似乎不再引用 User 和其他类型之间的任何类型的继承,但消息仍然存在。我认识的人从来没有见过它。

我真的没有任何代码可以提供参考;这似乎是一个映射问题。以前有没有人看到过这个特定消息的异常?

4

1 回答 1

0

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

于 2012-06-20T15:57:30.340 回答