【发布时间】:2012-06-19 22:18:02
【问题描述】:
我正在处理一个我发现很难调试的 EF 问题...以前,有一个按类型的表继承设置来管理我系统中的不同用户类型 - 一种对所有用户都通用的根类型,以及几个不同的子类型,大致基于使用该帐户的人的类型。现在,我遇到了一些问题,需要我删除继承,而是在每个子类上放置一个 UserId 属性,该属性是用户 Id 属性的外键。因此,现在其他用户类型将拥有用户导航属性,而不是用户。
我已经使用 EDMX 设计器删除了所有继承关联,我添加了所有 UserId 属性及其关联,确保所有其他用户类型现在都有自己的实体键,并获得了关联和导航属性用户设置在每个特定的。但是,当我实际运行我的应用程序时,我收到一个 TargetInvocationException 消息,告诉我“用户既不是(其他类型)的超类型也不是子类型”。
我一直在寻找有关此错误消息的其他参考资料,但找不到任何东西,而且我无法确定是什么原因造成的。在我的 EDMX 中,似乎不再引用 User 和其他类型之间的任何类型的继承,但消息仍然存在。我认识的人从来没有见过它。
我真的没有任何代码可以提供参考;这似乎是一个映射问题。以前有没有人看到过此特定消息的异常?
【问题讨论】:
-
错误发生在哪一行代码?
-
堆栈跟踪的前三行:在 System.Data.Common.EntitySql.SemanticAnalyzer。
b__74(BuiltInExpr bltInExpr, SemanticResolver sr)... 在 System.Data.Common.EntitySql。 SemanticAnalyzer.ConvertBuiltIn(Node astExpr, SemanticResolver sr)... 在 System.Data.Common.EntitySql.SemanticAnalyzer.Convert(Node astExpr, SemanticResolver sr)... 显然没有可用的行号。它发生在我第一次尝试检索任何类型的实体时。 -
EDMX 中似乎有一些东西表明您的实体是继承的。您是否从数据库中生成了 EDMX?如果是这样,请尝试从更新的数据库中生成新的 EDMX,然后比较 EDMX 文件。
标签: c# entity-framework entity-framework-4