2011-02-14 160 views
2

我正在移動實體框架4.0中的第一步,而且我目前正面臨一個煩人的問題。在自動生成的實體類中缺少導航屬性

我的應用程序的認證/授權過程是基於標準的ASP.NET成員資格提供,換句話說,該數據庫是衆所周知的ASPNETDB.MDF。在這個數據庫中,除了別的以外,還有表aspnet_Users和aspnet_Roles,它們通過表aspnet_UsersInRoles鏈接在一起。

我產生了新的「ADO.NET實體數據模型」,我選擇了從數據庫生成,我提供了所有必要的參數,對我產生相對.edmx文件嚮導。我將其命名爲「SecurityModel」。在aspnet_User實體中,我可以看到有一個導航屬性應該檢索所有鏈接的角色,反之亦然。

在這一點上,我添加了一個新的「域服務」,在我的情況SecurityDomainService。 當我被問到時,我選擇了SecurityModel及其包含的所有表。 即使在這種情況下,嚮導也會爲我生成SecurityDomainService。

顯然沒有問題。但是,我意識到在實體aspnet_User中,我擁有所有導航屬性(Membership,Profile,Applications等),但角色。

我在某處讀到EntityFramework不處理多對多的關係。但是我可以在我的實體數據模型中看到aspnet_Roles和aspnet_Users之間存在關聯,並且它基於aspnet_UsersInRoles。我還可以在數據模型設計器中看到用戶實體中的「角色」導航屬性。

所以,我的問題是爲什麼還沒有生成此導航屬性?

在此先感謝您的幫助。 乾杯, G.

回答

1

這裏的問題是,aspnet_UsersInRoles表只包含多對多關係中表的主鍵字段。實體框架'內聯'這個表,並不代表它是一個實體。實體框架處理這一點很好 - 它是不支持這種類型的關係的RIA服務。

只需在表中添加一個額外的字段將防止它被內聯,並導致生成一個aspnet_UsersInRoles。這將在RIA服務中得到支持。

你需要小心修改ASPNET架構,以確保您不會打破任何的存儲過程等,但增加了一個可爲空位列應該不會造成太大的破壞。