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

时间:2011-02-14 12:41:37

标签: c# entity-framework ado.net entity-framework-4 ria

我正在移动Entity Framework 4.0中的第一步,我目前正面临一个恼人的问题。

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

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

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

显然没有任何问题。但是,我意识到在实体aspnet_User中我有所有导航属性(Membership,Profile,Applications等)但是Roles。

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

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

提前感谢您的帮助。 干杯, -G。

1 个答案:

答案 0 :(得分:1)

这里的问题是aspnet_UsersInRoles表只包含多对多关系中表的主键字段。实体框架“内联”此表,并不将其表示为实体。实体框架可以处理这种情况 - 它是不支持这种关系的RIA服务。

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

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