我不確定我的標題是否準確地描述了我正在嘗試執行的操作。EntityDataSource訪問GridView中另一個實體的集合
我在我的實體框架,人員和用戶有兩個表。我想顯示用戶的網格,所以我成立了這個EntityDatasource:
<asp:EntityDataSource ID="peopleQuery" runat="server"
ConnectionString="name=myEntities" DefaultContainerName="myEntities"
EnableFlattening="False" EntitySetName="people" Include="location"
Where="it.active = 1" OrderBy="it.lastname, it.firstname">
</asp:EntityDataSource>
在我的GridView
現在,我可以綁定到像姓氏,名字,EMAILADDRESS領域,領域從類似地址的位置表市。
現在,在我的系統中,用戶記錄可以附加到一個或多個人員記錄。所以這是一對多的關係。在gridview中,我想顯示與每個人相關的用戶。我可以用RowDataBound事件來做到這一點,但是這需要爲數據庫中的每一行額外查找數據庫。
是否有一種有效的方法從「一對多」外鍵關係的「多」端導航?
實際上,它甚至不一定是一對多的。它可能是1比1,但是你處於外鍵關係的另一端。所以,在這個例子中,EntityDataSource使用「person」表,但在用戶表中,我有一個personid字段。所以外鍵是user.personid => person.personid。由於GridView是從用戶人員表中驅動的,因此如何導航到用戶表以在我的GridView中顯示user.username?
我看到你在那裏做什麼,如果有一個人稱爲用戶的集合,這將工作。它沒有。用戶記錄具有字段personid,使得一個或多個用戶可以與一個人相關聯。 (例如:約翰史密斯可能有一個管理登錄和transactonal登錄。) – RMS2
所以基本上,使用上面的代碼,我需要將TemplateField的DataSource設置爲類似[僞代碼]'select * from user where personid = Eval(「personid」)',但我認爲這需要查詢N + 1次的數據庫。 – RMS2
第二次看,你的回答是對的錢,我確實有我的數據模型中建立的關係。我將你的代碼添加到了我的GridView中,我沒有收到任何錯誤,但它也不顯示用戶名。不知道爲什麼 - 肯定有一個名爲「用戶」的集合,並且該集合中的每個項目都有一個名爲「用戶名」的屬性。有任何想法嗎?我們缺少什麼?順便說一句,如果我將「用戶」更改爲「用戶1」,則會出現錯誤。但是,如果我將「用戶名」更改爲「用戶名1」,我不會收到錯誤,但它仍然不會顯示任何內容。 – RMS2