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'
谁能告诉我我做错了什么?如何正确设置才能使其正常工作?
答案 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
创建一个,因此它正在为您创建一个。
注意:已经设置了约定,并且不需要某些属性,或者可以反过来放置,但我觉得定义这样的事情只需要很少的时间,并增加未来开发人员代码可读性。