2014-10-03 71 views
0

總是新手到MVC,我有一個我建立在PHP/MySQL中的庫應用程序。我試圖將其移動到MVC。我已經將數據庫移到了SQL服務器上,並試圖設置實體框架。 我有以下類(每一個單獨的文件):實體框架如何在另一個類中定義一個類

public class Book 
{ 
    public int BookID { get; set; } 
    public string BookTitle { get; set; } 
    public int? SeriesID { get; set; } 
    public virtual Genre Genre { get; set; } 
    etc 
} 

public class Genre 
{ 
    public int GenreID { get; set; } 
    public string GenreName { get; set; } 

} 

如果我的理解是真實的,這應該創建一個包含類別對象實例的書對象的實例。但是當我編譯它時,我得到以下錯誤:

An exception of type 'System.Data.Entity.Core.EntityCommandExecutionException' occurred in EntityFramework.SqlServer.dll but was not handled in user code.

Inner Exception: Invalid column name 'Genre_GenreID'

誰能告訴我我做錯了什麼?我如何正確設置它才能使其正常工作?

+0

添加GenreID在Book類...它作爲外鍵 – 2014-10-03 04:41:07

+0

@DanHunex這是不對的 – 2014-10-03 04:42:13

+0

我們應該知道如何在實體框架 – 2014-10-03 04:43:07

回答

0

您需要定義關係的另一面,併爲流派添加外鍵。我也想明確地定義我的外鍵。

public class Book 
{ 
    public int BookID { get; set; } 
    public string BookTitle { get; set; } 
    public int? SeriesID { get; set; } 
    public int GenreID { get; set; } 

    [ForeignKey("GenreID")] 
    public virtual Genre Genre { get; set; } 
    etc 
} 

public class Genre 
{ 
    public int GenreID { get; set; } 
    public string GenreName { get; set; } 
    public virtual ICollection<Book> Books { get; set; } 
} 

該實體正在尋找Genre_GenreID的原因是,你沒有一個對Book創建,所以它創造了一個給你。

注:有設置到位公約和一些屬性是不需要的,或可以放在周圍的其他方式,但我覺得定義是這樣的東西需要一點時間,並提高未來的開發代碼的可讀性。

+0

謝謝,我是否還必須在數據庫中定義外鍵,或者只是在代碼中? – MackTheKnife 2014-10-03 05:25:48

+0

@MackTheKnife創建一個遷移或是添加列和外鍵 – SnareChops 2014-10-03 05:34:18

相關問題