1

我在寫一個ASP MVC 3應用程序。我爲我的數據庫使用Sql Server 2008 R2。實體框架代碼首先嚐試打開錯誤的數據庫

我創建了我的數據模型,我的DbContext被稱爲EFDbContext。 我創建了我的數據庫,名爲SportsStore

我的連接字符串是:

<add name="EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient" /> 

我運行應用程序,並沒有數據顯示。

我發現EF自動生成一個新的數據庫SportsStore.Domain.Concrete.EFDbContext,但我希望它使用我以前創建的SportsStore,並自動將我的模型屬性映射到表格列。 如果我禁用自動生成數據庫功能,我得到以下錯誤:

Cannot open database "SportsStore.Domain.Concrete.EFDbContext" requested by the login

不宜實體框架試圖打開SportsStore數據庫?爲什麼它試圖打開那個?我有錯誤的連接字符串嗎?

+0

什麼是您的EFDbContext類的構造函數看起來像?你把連接字符串傳給它了嗎?您可以將連接字符串傳遞給DBContext構造函數,或使用上下文類的名稱在web.config文件中設置連接字符串。 http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx – Felix

回答

1

hmm.I得到同樣的錯誤。經過一番努力,我意識到我把連接字符串放在錯誤的Web.config文件中。有兩個Web配置文件。一個在view文件夾下,另一個在project.You需要在添加一個連接字符串的項目文件夾

2

奇怪...你有沒有試過這個連接字符串?我認爲你需要MARS來用DbContext做一些事情。

<add name="EFDbContext" connectionString="Data Source=LOCALHOST\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" /> 

這些是唯一不同於我的項目之一,這項工作。您確定類&連接字符串的命名完全相同嗎?你有沒有嘗試像這樣命名連接字符串?

<add name="SportsStore.Domain.Concrete.EFDbContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=SportsStore;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient" /> 
+0

好吧我會嘗試當我回家。我忘了說我的模型是在一個不同的項目中,所以它在一個單獨的dll中。我認爲從domain.dll開始工作的實體框架甚至沒有閱讀我的mvc應用程序中的web.config文件。也許我需要爲domain.dll創建一個app.config並在那裏設置我的連接字符串。 – Gonzalo

2

我可以給你一個建議。 當我在一個項目(通常是類庫)中擁有我的DbContext和相應的連接字符串時,我遇到了類似的困難。但是,如果您在其他項目中使用win形式,它會忽略後者。它試圖從啓動項目的配置文件中獲取連接字符串。

如果這是您的情況,請嘗試將您的連接字符串放入啓動項目配置文件中。

+0

我有一個mvc應用程序,這是我的啓動項目,和domain.dll,我有我的模型。連接字符串位於mvc應用程序的web.config中。我認爲它沒有被讀取,所以EF創建一個與我的上下文命名相同的新數據庫。我會嘗試在app.config中爲domain.dll設置我的連接字符串,並查看會發生什麼。 – Gonzalo

+0

我遇到了同樣的問題。配置需要在啓動項目中。 – aBetterGamer

1

我已經註釋掉默認的連接字符串,放在我的下下:

<connectionStrings> 
<!--<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MvcMovie-20130509163734;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-Mvc4Movie-20130509163734.mdf" providerName="System.Data.SqlClient" />--> 
<add name="MoveieDBContext" ... 

這使EF無視我的連接字符串,並生成自己的。取消註釋默認連接使得EF使用我的並且一切正常。