2011-06-22 65 views
0

好吧,這很可能是一個愚蠢的問題。我首先使用實體​​框架代碼。我有兩個類,用戶和事件,有多對多的關係。當EF生成我的數據庫表時,它會創建一個連接表,我將其稱爲Users_Events。該表有兩列,User_ID和Event_ID。目前一切都很好。使用LINQ查詢連接表格

我想從我的數據庫中拉出一個事件並將其序列化爲JSON。除了我不能拉事件的用戶,因爲這會創建一個循環引用。我想在這裏做的是查詢我的連接表,並獲得所有具有與我正在序列化的事件的ID相關聯的Event_ID的User_ID。

我該怎麼做?

+0

我不知道序列化的工作很像你可能會預期的。如果你已經先試了一下,發現它序列化了可導航的集合,那麼我的道歉,但是我沒有經歷LINQ到SQL的這種行爲(儘管我認識到EF4.1差別很大),因爲延遲加載/延遲執行。我必須明確指定加載選項才能在序列化之前檢索相關集合。查看[此MSDN文章](http://msdn.microsoft.com/zh-cn/library/bb896272.aspx)以獲取有關正確整理序列化數據的相關記錄的更多信息。 – lsuarez

+0

它沒有顯式指定序列化相關對象。我希望事件序列化。我希望事件的用戶被序列化。我不希望事件'用戶'事件序列化(創建循環引用)。如果我明確地包括用戶(使用.Include(「用戶」)),則用戶及其所有可導航屬性也將被序列化,包括用戶的事件。 – OpticalDelusion

回答

3

我不確切地知道你想在你的JSON中結束什麼,但我懷疑你想要選擇一個新的匿名類型並序列化。沿着這些線的東西可能是:

from e in myContext.Events 
where e.ID = 123 
select new { 
    Event = e, 
    UserIDs = (from u in e.Users select u.ID) 
} 
+0

我的類很大,創建匿名類型非常繁瑣,代碼繁瑣,但也許。 – OpticalDelusion

+0

我編輯了我的答案,提供了另一種包裝事件的方法。同樣,這取決於你希望你的JSON看起來如何,但這是我使用的方式。 –

+0

另一個答案是查看JSON序列化程序的功能。我不確定.NET版本,但Newtonsoft有一個[處理自我引用循環的功能](http://james.newtonking.com/projects/json/help/html/T_Newtonsoft_Json_ReferenceLoopHandling.htm) 。 –