自动生成的实体类中缺少导航属性
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 架构,以确保您不会破坏任何存储过程等,但添加可为空的位列不应造成太多中断。
【讨论】:
以上是关于自动生成的实体类中缺少导航属性的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver数据库中为datetime类型,通过myeclipse逆向工程生成实体类中属性为啥是java.sql.Timestamp