2011-05-05 51 views
7

我先使用EF 4.1代碼。運行到一個非常奇怪的情況: 數據庫中不存在,代碼被執行,只要代碼要執行對資源庫中查詢(也使用存儲庫模式)EF 4.1代碼首先導致奇怪(登錄)運行時錯誤

MyRepsitory.Get(whereClause) 

我得到這個錯誤:

Cannot open database "MyDatabase" requested by the login. The login failed. Login failed for user 'sa'.

行!所以我試圖找出它是由什麼引起的,並做了以下操作:在導致錯誤的行上設置了一個斷點,並且一旦該行被命中,我從調試(觀察)窗口發出另一個針對存儲庫的查詢

MyRepository.GetAll(); 

et voila數據庫被創建。所以我想:爲什麼不欺騙數據庫(作爲解決方法)並對存儲庫發出此請求?結果是:一旦這個代碼被執行,我會得到相同的錯誤!

我在做什麼錯了? 這曾經像一個魅力工作!

編輯 這讓我生氣! 我將模型和一些代碼(用於存儲庫模式)分離到一個新項目中。試圖執行相同的代碼,它在這個新項目中起作用。這怎麼可能?

看着SQL Serv2008 EXP的日誌,我看到下面的錯誤/事件:

啓動備份數據庫 'MyDatabase的'

設置數據庫選項SINGLE_USER爲ON數據庫MyDatabase的。

錯誤:18456,嚴重性:14,狀態:38

用戶登錄失敗 '山'。原因:無法打開顯式指定的數據庫。 [客戶:]

回答

1

爲了將來的使用:事實證明,EF 4.1不是我的問題的根源!

正如我上面所述(在編輯之後),可以在新項目中運行(UNCHANGED)代碼,它將按預期執行!

同樣,我成功地創建了一個新項目,引用了原始項目的模型和DAL(存儲庫等)以及新項目中按預期方式執行的新代碼。

這使我認爲這是一個基於Visual Studio 2010解決方案(或項目)的問題。我不記得對這個解決方案做了什麼奇怪的事情(我做的唯一的事情就是添加了一個測試項目,之後我刪除了這個項目,還有一些 - 我認爲有三個文件與這個項目的測試項目有關 - 是這個WEIRD? )。

我能想到的唯一解決方案就是從頭開始創建一個新的Visual Studio 2010解決方案,並將原始項目放入解決方案樹中並且它工作正常!

+0

我今天在VS 2015的Web API項目中遇到了非常類似的問題。我從零開始沒有任何新項目。相反,我在解決方案資源管理器中對我的C#web API項目執行了一個乾淨的操作,並且它工作正常。這太瘋狂了。同一個sa憑證(在我的項目的web.config文件中配置)在整個一天都在工作,它突然停止工作,沒有任何地方。 – RBT 2016-12-02 12:01:49

9

感謝Savvas,分享創建新解決方案解決您的問題的事實。我遇到了與EF 4.1相同的奇怪問題,並且刪除VS2010「SUO」文件似乎對我有用。以爲我會分享這一點,以節省時間從頭開始重新創建解決方案。

+1

任何想法是什麼造成這種情況? – FRoZeN 2011-09-01 12:36:42

+0

我在VS2012上,根本沒有任何'suo'文件。 – Shimmy 2012-11-15 00:08:19

+0

@Shimmy:即使在VS2012上也應該有一個,不包括在解決方案中,但與.sln文件一起,並且隱藏。刪除它解決了這個問題。 – 2013-01-19 14:40:53

1

我遇到了這個問題,經過深入研究發現,Code First認爲它是架構的唯一擁有者,這是一個問題。

http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/79885a6d-e0f2-4948-8f3c-d5da1941ace3

他們還沒有完全得到它想出了DB的用戶實例(這就是「用戶實例=真」,就是在連接字符串中與您建立在App_Data文件夾中的SQL Server的文件)。因此,要麼刪除它或使用以下內容:

Data Source=.\SQLEXPRESS;Database=NerdDinners;Integrated Security=SSPI; 

Code First將創建並附加(或修改)數據庫直接到您的SQL Server實例。然後您可以使用Management Studio或VS Server Explorer連接到它。