2015-10-06 36 views
1

我不知道實體框架如何知道要連接的表的基礎上,下面的代碼:的DbContext類ASP.Net MVC

public class Movie 
    { 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public DateTime ReleaseDate { get; set; } 
     public string Genre { get; set; } 
     public decimal Price { get; set; } 
    } 

    public class MovieDBContext : DbContext 
    { 
     public DbSet<Movie> Movies { get; set; } 
    } 

Source

我知道,在默認情況下它連接到的LocalDB 。我可以指定該數據庫中添加一個條目來連接到Web.config文件,像這樣:

<add name="MovieDBContext" 
    connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Movies.mdf;Integrated Security=True" 
    providerName="System.Data.SqlClient" 
/> 

現在,MovieDBContext類有一個Movies屬性。我可以改變它的名字而不破壞任何事件嗎?或者這個名字被框架用來知道要查詢哪個表?

如果我沒有將以上代碼添加到Web.config文件中,該怎麼辦?它會根據屬性的名稱自動創建一個Movies.mdf表嗎?

+0

EF連接到數據庫,而不是表格。在名爲「Movies」的數據庫中,您將擁有一個名爲Movie的表格,因爲您有一個DbSet。名稱電影可以改變,如果你喜歡,但那是慣例。 –

+0

表名應該是實體名稱的插件。表'汽車'包含'汽車'實體。所以電影表將被創建。我希望這是你的意思。 – user107986

+0

@Steve Greene:默認情況下,EF使用'PluralizingTableNameConvention',所以表名將是「Movies」 – Vova

回答

0

如果您是代碼優先方法,您可以更改Movies屬性的名稱。實體框架使用類名稱(在這種情況下爲class Movie)來確定表名。

默認情況下,它使用以下約定:從類名稱複數並嘗試在數據庫中查找此類表。

關於數據庫名稱:即使沒有連接字符串,EF也會嘗試創建數據庫,但會給它一個不同的名稱(例如WebApplication1.MovieDBContext)。

+0

順便說一句,你有任何MS頁面說這個?我無法在任何地方找到它。 – user107986

+1

看到這個問題:http://stackoverflow.com/questions/10512900/list-of-entity-framework-code-first-default-naming-conventions 還有MSDN鏈接: https:// msdn。 microsoft.com/en-us/data/jj679962 - 請參閱底部的示例。 https://msdn.microsoft.com/en-us/library/system.data.entity.modelconfiguration.conventions(v=vs.103).aspx – Vova

-1

如果您的數據庫已經使用EF刷新,可能會發生錯誤。因此,請嘗試將新命名的類顯式映射到表。

+0

即使數據庫是由EF創建的,它仍然使用類名然後DbSet屬性名稱.. – Vova

+0

它使用召集,所以如果它不能匹配類名到表名會發生什麼? –

+0

EF將拋出異常: 自創建數據庫以來,支持'MovieDBContext'上下文的模型已更改。考慮使用Code First Migrations來更新數據庫(http://go.microsoft.com/fwlink/?LinkId=238269)。 – Vova