2010-06-15 99 views
0

我有幾個表和視圖:LINQ到實體:許多一對多加入表和視圖

表:
- aspnet_Roles(與角色ID &其他列)
- Status(與StatusId其他&列)
- RoleStatus(與角色ID和StatusId和關係)

當我創建的LINQ到實體EDMX文件,它會創建2個實體在一Status列表屬性和aspnet_Roles列表Status
到目前爲止確定。

但現在我有一個StatusId列的視圖。

我想要的是創建一個LINQ查詢,在該視圖和aspnet_Roles表之間加入一個連接,在結果集中添加RoleName列。

在SQL它會是這樣的:

Select a.*, aspnet_Roles.RoleName From SearchView a 
INNER JOIN RoleStatus ON a.StatusId = RoleStatus.StatusId 
INNER JOIN aspnet_Roles ON RoleStatus.RoleId = aspnet_Roles.RoleId 

但我找不到怎麼辦,在LINQ到實體。 問題是我從來沒有訪問到RoleIdStatusId,因爲這些字段被aspnet_RolesStatus列表屬性「替換」。

所以我得到一個LINQ這樣的:

from avis in ctx.SearchView 
join joinedRoles in ctx.aspnet_Roles 
on avis.StatusId equals joinedRoles.Status. (and then what ??) 

當狀態是我無法找到匹配StatusId沒有一個列表。

我想我做錯了事,但我不知道在哪裏。

回答

1

首先,我建議升級到EF4;他們添加了「外鍵關聯」,所以我們現在除了引用之外還有* Id字段。

其次,您的視圖是否映射到設計器中的實體?應該可以在視圖和狀態表之間添加關聯。 (我沒有真正做到這一點,但我相信這會起作用)。

+0

哼,看起來EF4真的很酷,但我不能。 是視圖被映射(ctx.SearchView)。 – 2010-06-15 14:53:16

+0

您是否嘗試過使用SearchView.StatusId作爲導航屬性(例如SearchView.Status?)。 – 2010-06-15 15:39:46