2012-09-04 187 views
7

我使用EF 4.3和代碼優先的方法。實體框架4.3代碼優先數據庫命名

隨着EF 4.3,它建議使用新<entityFramework />配置部分初始化的上下文的連接字符串。

我做了一些網上搜索,我似乎無法找到使用此方法用於初始化與配置的數據庫名稱的連接的便捷方式。

例如,讓說,我在我的應用程序中的MyDBContext實體。 我希望它用在連接字符串中指定的數據庫名稱從Initial Catalog=MyDB;

從EF 4.1使用老方法,我可以通過將連接字符串在配置文件中的<connectionstring>部分做到這一點沒有問題。

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

如果我想使用EF 4.3支持的較新的configsection,我沒有辦法在連接字符串中指定數據庫名稱。我嘗試了以下,但Initial Catalog屬性被忽略。我相信這是有充分的理由忽略,因爲整個事情是一個DefaultConnectionFactory可能由多種情況下在我的應用

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
     <parameters> 
      <parameter value="Data Source=.\SQLEXPRESS; Initial Catalog=MyDB; Integrated Security=True; MultipleActiveResultSets=True" /> 
     </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

我codefirst方法創造與使用的結果,這是MyNamespace.MyDBContext默認的數據庫名稱中使用

據我所知,有一種方法可以通過將一個值傳遞給基於DBContext對象的nameOrConnectionString參數來覆蓋此默認命名。

所以,我可以做這樣的事情:

public MyDBContext() : base("MyDB") { } 

但是,如果我採取這種做法我結束了硬編碼DB名字爲我的應用程序和個人而言,我不喜歡這樣。

我想知道是否有任何方法可以方便地從Web.config文件中爲我的數據庫上下文傳遞數據庫名稱,還是應該繼續使用<connectionstrings>部分?

回答

0

你覺得多久數據庫名稱將不得不改變?

這麼說,我還沒有遇到這個問題我自己(我很好硬編碼的數據庫名稱 - 它不應該改變)一個選擇可以是存儲在Web.config希望數據庫名稱作爲應用程序設置,然後讓您的代碼從那裏獲取值。

編輯:您可能也想看看http://blogs.msdn.com/b/adonet/archive/2011/01/27/using-dbcontext-in-ef-feature-ctp5-part-2-connections-and-models.aspx

public UnicornsContext() 
    : base("name=UnicornsCEDatabase") 
{ 
} 

隨着牽拉與特定名稱的連接字符串:

<configuration> 
<connectionStrings> 
    <add name="UnicornsCEDatabase" 
     providerName="System.Data.SqlServerCe.4.0" 
     connectionString="Data Source=Unicorns.sdf"/> 
</connectionStrings> 
</configuration> 

根據http://blogs.msdn.com/b/adonet/archive/2012/01/12/ef-4-3-configuration-file-settings.aspx這仍然應該工作在4.3。

+1

一般來說,我不指望DB名稱改變。但可能會出現數據庫名稱可能與同一SQL實例中的另一個數據庫名稱衝突的情況。如果我想在同一個SQL實例上運行同一個應用程序的多個實例,也是這種情況,如果不重新編譯應用程序並更改數據庫名稱,則無法完成此操作。不理想。 –

+0

然後我會說看看上面兩個選項之一。就個人而言,ADO.NET博客的想法似乎是兩者中最好的選擇。 –

+0

謝謝,我想我會堅持使用參考文章中的Web.config文件中的connectionstring鍵。 –