看板 Web_Design 關於我們 聯絡資訊
最近在看MVC 如果model層使用Entity framework 那要如何開一個連接但對資料庫做兩次查詢呢 看了一下msdn的範例 感覺好像是一個select 就會對資料庫連接關閉一次 可以給點方向嗎? -- 我覺得IE11是世界上最強的瀏覽器了 ▁▁▁▁ 其他的應該廢除 ██ - □–□ 如果各位有興趣的話,可以現在開始下載 只要Google下載Internet Explorer   ψBigLoser 因為我們只會支援精英瀏覽器,絕對不會接受垃圾 ψdohProject //█◣ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.249.104.106 ※ 文章網址: http://www.ptt.cc/bbs/Web_Design/M.1410405378.A.B82.html
ssccg: 用Entity framework就不要去管connection什麼時候開關的 09/11 12:55
ssccg: 而且基本上底層的Data Provider都有做connection pool 09/11 13:02
ssccg: 連接字串沒變的話不用去想什麼開關問題 09/11 13:02
為什麼不用去想呢..你的意思是他會幫我妥善處理? 使用不同的model也只會開關一次,是這樣嗎? 因為我寫的系統很雜,所以一個功能開5~6次不同table, 做不同處理是很平常的,我很怕她會我用一個他就開關一次, 這樣效率會非常非常差
alog: 就去測試跟驗證 09/11 15:28
alog: 沒有數據是沒辦法認定效率非常差的 09/11 15:28
alog: 舉個例子,像以前大家都認為 Java 還是動態語言在解決某種 09/11 15:29
alog: 問題的時候效率非常差,而且都拿C語言比較 09/11 15:29
alog: 事實上在某種狀況下比C/C++還快 09/11 15:29
alog: 請不要用自己的思考去先入為主,建議多做實際測試 09/11 15:31
alog: 像Javascript v8的RegExp就比C跟golang的RegExp庫還快很多 09/11 15:31
alog: 這沒測試過還真不曉得說,原來技術進步這麼快 09/11 15:32
你可能誤會我的意思了,舉個例子來說我要兩個table1和table2的資料 那我會 連線.open(); table1.取得資料(); table2.取得資料(); 連線.close(); 這是比較直覺得作法對吧? 你應該不會希望是下面這種, 連線.open(); table1.取得資料(); 連線.close(); 連線.open(); table2.取得資料(); 連線.close(); 我並不是在說EF效率差,而是我想了解一下他運作情況是怎樣的, 1F給的解釋,可以理解為不會有這個問題,不過我想在清楚一點了解 謝謝
ssccg: 在同樣的connection string下,conn.Open()是從pool取連線 09/11 16:24
ssccg: conn.Close()是把連線放回pool,不是真的開關 09/11 16:24
ssccg: 只有pool沒有已開啟且可使用的連線時才會開新的 09/11 16:25
ssccg: 你寫段程式去試 new SqlConnection, open, close 很多次就 09/11 16:27
ssccg: 知道了,第一次很長,後面再開關幾乎不花時間 09/11 16:31
非常感謝!!!!
ssccg: 如果你有別的理由要控制connection開關,要EF6 09/11 16:51
現在這樣應該就行了,早上在公司測了一下,自己寫的connection,不是用EF 迴圈一萬次抓同一筆資料,要1X秒(內網)這樣應該沒甚麼問題..
chatnoir: EF在selct基本上是沒問題的,比較麻煩是update&insert 09/13 22:54
可是上面的版友說他不是真的斷開連結,還是說只有select沒斷開? update和 insert是有段開的? 這樣就麻煩了.. ※ 編輯: BigLoser (113.61.164.195), 09/14/2014 14:30:37
winsummer: 你可以用Dependency Injection 09/27 13:09
winsummer: nuget上有很多 injection/IoC 容器去幫你管理生命週期 09/27 13:10
winsummer: DbContext 通常會跟http request 同生共死 09/27 13:11