我們在使用linq查詢時,你的資料源可能是linq to sql或者是ef産生的,但隻要是使用linq的文法去實作一個查詢,就有可能出現“查詢包含對不同資料上下文上所定義項的引用”的異常,這個異常很明顯,是你在進行join表關聯查詢時使用了多個不同的DataContext對象,這是linq不允許的。
有了這個異常,就會出現一些解決方案,以下是我們可能的一些做法:
1 使用全局的static對象,但對于linq to sql來說,在高并發時,這個static對象會抛出一些莫明奇秒的異常,那時,我們會說,linq to sql不如ado.net靠的住。
2 使用單例模型建立對象,保證它在所有對象中使用同一個DataContext對象,在不使用db時,記住要dispose它呀,呵呵(這也是目前我的做法)。
3 儲存在做join關聯表時,将它全部限制在DAL層,它們的使用同一個基類下的GetModel()來得到結果集,這樣是可以的。(使着有點不爽,太局限了)
好了,從資料基類開始吧!(隻是簡單的實踐,不是真實項目中的代碼幼,呵呵)
1 建立DataBase
2 建立一個User_InfoRepository
3 建立一個User_ProfileRepository
4 建立一個調用方法
如果是使用User_InfoRepository對象與User_ProfileRepository直接在外邊做join時,它就會抛異常了,這是正常的,當然,如果它是正确的,那我們的
今天要說的第三種方案也是沒有意義了,呵呵。
錯誤的作用(看着挻好,但它是一種“查詢包含對不同資料上下文上所定義項的引用”的)
正确的(有點太局限了,是以,以後還是用第2種方案吧,呵呵)
事實上,在linq這個新世界裡,有着很多我們不清晰,而且微軟自己也不太清楚的概念,這需要我們自己去探讨,呵呵。