我是Entity Framework
的新手,在碰撞課程結束後,我的一些玩家決定先使用ef 5代碼。使用Windows服務作爲客戶端的數據庫連接的問題
我已經將dbcontext派生文件與程序集中的存儲庫和連接字符串分開。這個想法是創建一個可以跨項目重用的程序集。
在數據庫組件的連接字符串看起來是這樣的:
<add name="LmsDb" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=LmsDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\LmsDb.mdf;;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" />
雖然使用的數據庫項目(客戶端)組件的連接字符串如下所示:
<add name="LmsDb" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=LmsDb;Integrated Security=SSPI;MultipleActiveResultSets=true" providerName="System.Data.SqlClient" />
我創建一個MVC項目工作得很好,我所有的集成測試都能很好地處理這個連接字符串。
當我必須創建某種調度程序邏輯以某種可配置的時間間隔通過數據庫並根據那裏的數據執行某些操作時,就會出現問題。我決定通過創建一個帶定時器的簡單Windows服務來測試這一點,該定時器執行某些查詢的ef 5代碼。
計時器設置爲每分鐘執行一次選擇所有查詢,但是當發生這種情況時,雖然我知道數據庫中有數據,但查詢並未返回任何結果。
當我看着DbContext.Connection.State
,其設置爲關閉。
我在做什麼錯?
根據Julie Lerman的說法,我嘗試使用((ObjectContextAdapter)my context).ObjectContext.Connection.Open()
顯式打開連接。
雖然這似乎沒有任何幫助。
沒關係,我找到了問題。因爲我默認使用LocalDB,所以這會對我的數據施加一些限制。 LocalDb應該作爲開發人員的沙盒工作,並且默認情況下不應該由其他用戶訪問,而不應該由所有者訪問。我的Windows服務以LocalSystem身份運行,將其更改爲我的用戶帳戶使整個事情都能正常工作。但沒有例外被拋出.. – user1829436