一对一对象成员为空

时间:2018-01-10 21:48:50

标签: c# .net entity-framework

我正在学习实体框架。在我的数据库中,我有以下表格

电影表

TABLE [dbo].[movies](
   [id] [int] IDENTITY(1,1) NOT NULL,
   [name] [varchar](50) NOT NULL,
   [director] [varchar](50) NOT NULL,
   [genreId] [int] NULL )

流派表

TABLE [dbo].[genres](
   [id] [int] IDENTITY(1,1) NOT NULL,
   [name] [varchar](50) NULL,
   [category] [varchar](50) NULL

因此,genreId中的Movies列是对id

中相应Genres列的简单查找

我正在尝试在Entity Framework中配置此关联。这是我的电影课程:

[Table("movies")]
public class Movie
{
    [Key]
    public int Id { get; set; }
    public string Director { get; set; }
    public string Name { get; set; }
    public int genreId { get; set; }

    [ForeignKey("genreId")]
    public Genre Genre { get; set; }

}

这是我的类型课程:

[Table("genres")]
public class Genre
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public string Category { get; set; }

}

当我查询电影时,类型成员为空。我无法弄清楚为什么?

3 个答案:

答案 0 :(得分:0)

公共虚拟类型流派{get; set;} 虚拟关键字让EF在运行时创建一个类,也称为代理类,并根据需要设置关系

答案 1 :(得分:0)

您在实体框架中有3种类型的加载:渴望,懒惰和显式。您需要加载引用的对象。请阅读这篇文章:https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

然而,最简单的解决方案是定义public virtual Genre Genre{get;set}以允许延迟加载。

答案 2 :(得分:0)

对于那些关注这个问题的人,我通过添加include方法

解决了这个问题
context.Movies
       .Include(m => m.Genre)