2011-04-26 56 views
18

我已經從我的web.config中刪除了連接字符串,實體框架仍然連接到數據庫!連接字符串在哪裏設置?這是一個問題,因爲我需要將我的網站的實時版本指向實時數據庫。EntityFramework - 連接字符串在哪裏?

+2

創建一個與我的DbContext的類名完全相同的連接字符串 – Omu 2011-04-26 18:09:40

+0

。爲什麼這可能不起作用? – 2011-04-27 08:44:47

+4

嗯,我發現了這個問題。我在上下文構造器中設置數據庫的名稱,看起來如果有人這樣做,那麼它也必須是連接字符串的名稱!請投票... – 2011-04-27 09:05:39

回答

0

右鍵單擊您的Entity Framework模式(edmx文件)> goto Properties。你會在那裏看到連接字符串。

如果您的實體模型在一個單獨的項目中,那麼它必須在它自己的設置文件中。

+0

我沒有得到一個edmx文件,因爲我使用Code First。我已經搜索了'connectionString',並且它不會出現在我的解決方案的其他地方! – 2011-04-26 12:47:38

2

約定>配置,對吧?

默認情況下,EF Code fist將在您本地的SQL Express實例中創建一個數據庫。

+0

是的,我認爲這可能是這樣的。那麼如何讓它在web.config中使用連接字符串,因爲它似乎忽略了它? – 2011-04-26 13:54:24

+0

web.config中的連接字符串名稱與DbContext類的名稱相同嗎?即如果你有 'public class MyContext:DbContext' 那麼你的連接字符串需要命名爲MyContext – 2011-04-30 15:22:21

0

如果您正在使用DbContext的codefirst aproach,您可以在web.config中放置一個名稱與您的上下文類名稱匹配的連接字符串,它將工作得很好。

+0

似乎並不適合我。我添加了一個連接字符串,其中一些垃圾已添加到「數據源」值,並且它一直保持正常工作... – 2011-04-26 14:52:30

+0

它應該只是一個sql連接字符串,名稱attribut應該與您的上下文名稱完全匹配 – 2011-04-26 15:06:46

1

查看App.Config。它也會存儲在那裏。

9

你需要這樣的事:

<configuration> 
    <connectionStrings> 
    <add name="MyContext" 
     connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;Initial Catalog=YourDatabaseName" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

或者,如果你的數據庫所在的文件夾App_Data

<configuration> 
    <connectionStrings> 
    <add name="MyContext" 
     connectionString="Data Source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|YourDatabaseFilename.mdf;User Instance=True" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

替換MyContext與你的類擴展DbContext的名稱。

+1

我想我已經完成了。我已將「服務器」值設置爲IP地址,並將連接字符串的名稱設置爲派生上下文類的名稱,但它應該只是忽略它! – 2011-04-26 15:42:08

+0

這應該被標記爲答案 – reaz 2017-07-17 22:08:59

16

這裏有一個我發現的「常規優化配置」哲學,當涉及到試圖連接到現有數據庫(就像你在做什麼)。

如果您的DbContext類(例如Northwind)位於命名空間(例如MvcProject)中,由於某種原因,EF不會將名稱與Web.config中名爲「Northwind」(或「MvcProject .Northwind「),然後它只會創建一個默認爲本地SQLEXPRESS實例的連接字符串,其數據庫名爲」MvcProject.Northwind「。這將是一個空的數據庫。而且,當你意識到自己沒有連接到正確的數據庫時,你會想方設法弄清楚爲什麼你沒有收到數據。

我解決這個問題的方式(不是很優雅,但它是我發現修復它的最快方法):在DbContext類中添加一個構造函數,它使用web.config中的連接字符串的名稱調用基礎。

namespace MvcProject 
{ 
    public class Northwind : DbContext 
    { 
     public Northwind() : base("Northwind") {} 
    } 
} 

希望幫助別人那裏;-)

+1

這一個解決了我的問題。謝謝 – fabriciorissetto 2014-03-22 21:58:52

+0

官方文檔說你應該使用: base(「name = Northwind」) 我發現這是它的唯一工作方式。如果你測試「Forthwind」,你會發現它不會拋出異常,但是「name = Forthwind」會。 – Richard 2014-08-13 12:50:52

+0

我認爲這是我的問題,但仍然可以指導我與我的問題http://stackoverflow.com/questions/42475840/entityframework-keeps-referring-to-a-copy-of-my-actual-database – Samra 2017-02-27 01:48:01

4

的EF couldn't找到我的連接,但是我用的連接字符串中的基礎():

namespace MvcProject 
{  
    public class Northwind : DbContext  
    {   
     public Northwind() : 
      base("Data Source=servername;Initial Catalog=database;User ID=yourID;Password=yourPass;Trusted_Connection=False;") {} 
    } 
} 

剛測試連接和它的工作。

+0

是的,它可以正常工作,但將連接字符串放入代碼中被認爲是不好的做法,例如,如果要在生產服務器中部署應用程序,則需要更改代碼中的連接字符串,重新構建解決方案並再次發佈。 – 2017-02-02 15:37:57

1

我面臨同樣的問題,並簡單地改變我的連接字符串名稱建議在web.config文件作爲上下文db的名稱,一切順利。

相關問題