2015-07-20 51 views
2

我對MVC比較陌生,雖然我對大多數事情都很滿意,但我有兩個單獨的MVC項目,它們在不同的解決方案中,現在我需要第二個與之通信的項目數據庫支持我正在構建的一些新功能的第一個。在項目之外使用DbContext

我有時訪問這個數據庫引用從其他項目中ApplicationDbContext類在我的解決方案,像這樣:

context = new ApplicationDbContext(); 
     context.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["PortalConnection"].ConnectionString; 

這工作在其他項目中精我目前的解決方案中,但是當我引用ApplicationDbContext類在我的第二個MVC網站(我的解決方案之外)我無法像上面那樣定義連接字符串..數據庫設置無法訪問(我需要連接字符串在Debug和Release版本中更改,因此我需要定義連接字符串。 )。我認爲這是因爲它不在同一個解決方案中,所以我無法將原始MVC項目設置爲構建順序的先決條件。

如何確保在我的第二個解決方案中創建的新上下文對象在運行時使用正確的連接字符串?

JK

+0

它們是否處於相同的解決方案下?如果是這樣,您可以創建另一個處理所有DAL的項目。 – Kram

+0

不,他們不在同一個解決方案下。這是我的問題atm。奇怪的是,我無法從我的其他解決方案中訪問ApplicationDbContext的數據庫設置,我已經在相同的解決方案中完成了這項工作。 – JonnyKnottsvill

+0

這是錯的。您應該爲每個項目創建一個DAL,並且只是從一個項目到另一個項目進行通信。 – Kram

回答

2

我認爲你的困惑源於不知道連接字符串應該從哪裏來。連接字符串是正在運行的程序集提供的依賴項。兩個MVC項目都有自己的web.config文件,這兩個文件都應該有連接字符串到您的數據庫。第二個項目不能使用第一個項目的連接字符串。儘管如此,如果在兩個應用程序中使用完全相同的數據層(不管使用哪種類型的應用程序),最好製作一個包含DbContext以及類和映射的單獨程序集。同樣,運行時使用的連接字符串不在此項目中,但在每個使用數據層的單獨應用程序的配置文件中。

默認情況下,DbContext將查找具有其名稱的連接字符串。因此,如果您的上下文是ApplicationDbContext,請使用指定的連接字符串,如

​​
+0

感謝您的答覆。我明白。我有我的第二個解決方案中的連接字符串,但是我通常的方式確保這是使用的連接字符串(如我的問題)不會在我的第二個解決方案中工作。我不知道命名約定。我的上下文類使用DefaultConnection作爲應用程序設置中的連接字符串,所以我將其命名爲它可以找到它。對不起,因爲我對自己的解決方案缺乏認識,所以我繼承了這一點,所以有些寶石還沒有得到解決。 – JonnyKnottsvill

0

這裏有幾個選項:

1,更改您的控制器的ApiController並通過的WebAPI消耗你的數據;

2-將您的映射移動到類庫,並將這個類庫添加到這兩個解決方案:mvc應用程序和其他項目。

+0

在2-你指的是將ApplicationDbContext放在不同的項目中?這會幫助我在解決方案之外訪問它嗎? ApiController是一個不錯的選擇,因爲它靈活且不會太麻煩,但最好能夠擴展解決方案2的功能,而不必經常修改解決方案1的ApiController。解決方案2與Db的交流可能會相當多變,並且會經常延長。 – JonnyKnottsvill

+0

是的,你只需要在兩個解決方案中共享連接字符串。 –

+0

假設兩個應用程序都可以遵循相同的發佈時間表,第二個選項更容易維護。如果他們不這樣做,那麼他們可能會做得更好,因爲構建Web服務只是爲了公開您的數據(無論如何,這是一個壞主意;構建公開業務用例的服務器,而不是圍繞數據庫的簡單包裝)是方式更昂貴。 – Andy

相關問題