实体框架如何在另一个类中定义一个类

时间:2014-10-03 04:36:30

标签: c# entity-framework

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; }

}

如果我理解的是真的,那么应该创建一个包含一个Genre对象实例的Book对象的实例。但是当我编译它时,我得到以下错误:

  

类型' System.Data.Entity.Core.EntityCommandExecutionException'的例外情况发生在EntityFramework.SqlServer.dll中,但未在用户代码中处理。

     

内部异常:列名无效' Genre_GenreID'

谁能告诉我我做错了什么?如何正确设置才能使其正常工作?

1 个答案:

答案 0 :(得分: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创建一个,因此它正在为您创建一个。

注意:已经设置了约定,并且不需要某些属性,或者可以反过来放置,但我觉得定义这样的事情只需要很少的时间,并增加未来开发人员代码可读性。