自动生成的实体类中缺少导航属性

Posted

技术标签:

【中文标题】自动生成的实体类中缺少导航属性【英文标题】:missing Navigation property in auto-generated entity class 【发布时间】:2011-02-14 12:41:37 【问题描述】:

我正在 Entity Framework 4.0 中迈出第一步,我目前正面临一个烦人的问题。

我的应用程序的身份验证/授权过程基于标准的 ASP.NET 成员资格提供程序,换句话说,数据库是众所周知的 ASPNETDB.MDF。在这个数据库中,除了其他之外,还有表 aspnet_Users 和 aspnet_Roles,它们通过表 aspnet_UsersInRoles 链接在一起。

我生成了一个新的“ADO.NET 实体数据模型”,我选择了从数据库生成,我提供了所有必要的参数,向导为我生成了相关的 .EDMX 文件。我将其命名为“SecurityModel”。在 aspnet_User 实体中,我可以看到有一个导航属性应该检索所有链接的角色,反之亦然。

此时我添加了一个新的“域服务”,在我的例子中是 SecurityDomainService。 当有人问我时,我选择了 SecurityModel,以及它包含的所有表。 即使在这种情况下,向导也会为我生成 SecurityDomainService。

显然没有任何问题。但是,我意识到在实体 aspnet_User 中我拥有所有导航属性(成员身份、配置文件、应用程序等),但角色。

我在某处读到 EntityFramework 不处理多对多关系。但是我可以在我的实体数据模型中看到 aspnet_Roles 和 aspnet_Users 之间存在关联,并且它基于 aspnet_UsersInRoles。我还可以在数据模型设计器中看到用户实体中的“角色”导航属性。

那么,我的问题是为什么没有生成这个导航属性?

提前感谢您的所有帮助。 干杯, G.

【问题讨论】:

【参考方案1】:

这里的问题是 aspnet_UsersInRoles 表只包含多对多关系中表的主键字段。实体框架“内联”此表并且不将其表示为实体。 Entity Framework 可以很好地处理这个问题——RIA 服务不支持这种类型的关系。

只需向表中添加一个额外的字段即可防止它被内联并导致生成 aspnet_UsersInRoles。这将在 RIA 服务中得到支持。

您需要小心修改 aspnet 架构,以确保您不会破坏任何存储过程等,但添加可为空的位列不应造成太多中断。

【讨论】:

以上是关于自动生成的实体类中缺少导航属性的主要内容,如果未能解决你的问题,请参考以下文章

无法获取要更新实体框架中导航属性的关系

无法使用自动映射器映射内部导航属性。 EF 核心

sqlserver数据库中为datetime类型,通过myeclipse逆向工程生成实体类中属性为啥是java.sql.Timestamp

左连接后缺少导航属性

当我的类中有属性具有默认构造函数来提供值自动映射器时,如何映射?

实体框架此属性描述符不支持 SetValue