C# 从ApplicationDbContext调用时,外键对象返回null

C# 从ApplicationDbContext调用时,外键对象返回null,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我的外键有问题 我想要的是,对于每个视频模型,都有一个到它的概要模型链接 这方面的一个例子如下所示: public class VideoModels { [Required] public int Id { get; set; } public ProfileModels Profile { get; set; } } 而在ProfileModels中 public class ProfileModels { [Required] publi

我的外键有问题

我想要的是,对于每个视频模型,都有一个到它的概要模型链接

这方面的一个例子如下所示:

public class VideoModels
{ 
    [Required]
    public int Id { get; set; } 
    public ProfileModels Profile { get; set; }  
}
而在ProfileModels中

public class ProfileModels
{ 
    [Required]
    public int Id { get; set; }
    public string Title { get; set; }  
}
技术上不应该与VideoModels有任何联系,因为VideoModels依赖于ProfileModels,可能存在0对多关系

所以在测试之后,我的VideoModels有一个Profile_Id参数,它是ProfileModels的外键

但是在创建并检索对象之后,它返回NULL,但是当我检查数据库时,有一个现有的外键Id


请帮帮我,我已经在这里呆了好几个小时了

没关系,我只是忘了把外键属性设置为虚拟的

public class VideoModels
{ 
    [Required]
    public int Id { get; set; } 
    public virtual ProfileModels Profile { get; set; }  
}

没关系,我只是忘了将外键属性设置为
virtual

public class VideoModels
{ 
    [Required]
    public int Id { get; set; } 
    public virtual ProfileModels Profile { get; set; }  
}

Profile
由于
LazyLoading
而在此处为空。这允许我们拥有一个包含许多不同对象的对象,这些对象仅在需要时加载,而不是在加载父对象时加载。如果用户具有类似于Comments属性的内容,这将特别有用。如果没有
LazyLoading
,只要您想获取
VideoModels.ID
,就会加载注释集合。
LazyLoading
的一个缺点是,执行的每个导航都需要对数据源进行单独的查询

要允许懒散加载,您需要将相关对象属性标记为虚拟。

此外,必须在上下文中提供导航属性:

public class Database : DbContext {
    public DbSet<VideoModels> People { get; set; }
    public DbSet<ProfileModels> PersonDetails { get; set; }
}

Profile
由于
LazyLoading
而在此处为空。这允许我们拥有一个包含许多不同对象的对象,这些对象仅在需要时加载,而不是在加载父对象时加载。如果用户具有类似于Comments属性的内容,这将特别有用。如果没有
LazyLoading
,只要您想获取
VideoModels.ID
,就会加载注释集合。
LazyLoading
的一个缺点是,执行的每个导航都需要对数据源进行单独的查询

要允许懒散加载,您需要将相关对象属性标记为虚拟。

此外,必须在上下文中提供导航属性:

public class Database : DbContext {
    public DbSet<VideoModels> People { get; set; }
    public DbSet<ProfileModels> PersonDetails { get; set; }
}

请给出你如何检索数据的代码示例。它已经回答了,我忘记了关键定义。请给出你如何检索数据的代码示例。它已经回答了,我忘记了关键定义