我要嘗試解釋這一點,而不是真正地通過我正在工作的應用程序的整個設計。因爲誰在乎這一點。如果相關,我可以提供更多細節,但我認爲我涵蓋了以下所有內容。併發問題使用DbContext.Database.Connection.CreateCommand
主要問題:
我已經得到了我需要定期執行一些存儲過程。我從數據庫表中獲取proc名稱,所以我的應用程序沒有硬編碼知識。這是設計。我目前正在使用實體框架來完成我所有的數據訪問。我的應用程序是多線程的 - 我抓住所有需要運行的過程,然後遍歷每個過程,從我的配置表中獲取它的屬性,並將它排隊以在應用程序的線程池中的單獨線程上運行。
我正在使用Database.Connection.CreateCommand方法並執行procs - 將數據拉入數據表。當我只執行一個proc時,這可以很好地工作,但是當我遇到併發問題時。我得到具體的例外是
System.Data.SqlClient.SqlException: 新的事物是不允許的,因爲 有在 會話中運行其他線程。
我假設這是因爲我試圖執行我的程序,同時也通過實體框架訪問另一個過程的屬性。
潛在的解決方案/發生在我思緒的列車:
我能得到這個蠻好用DbContext.Database.SqlQuery方法的工作,如果我寫一個模型類,有我需要的領域。但是如果我根本不想寫一個模型課呢?有沒有一種方法可以做到這一點,讓實體框架實際處理查詢?
我可以抓住所有的屬性,然後開始執行任何特效。這可能會正常工作。如果我將屬性定義爲模型中的ICollections,它告訴我要運行的過程,當從數據庫中選擇所述模型時,是否有強制加載它們的方法,而不是稍後再遍歷它們以讀取它們?
創建一個新的連接聽起來像個好主意。有什麼我需要記住的嗎?任何「不要殺死您的服務器」警告? {{im新數據庫的東西}} – 2011-05-02 04:55:20