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

时间:2015-05-30 16:29:15

标签: 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]
    public int Id { get; set; }
    public string Title { get; set; }  
}

技术上不应该与VideoModel的VideoModels有任何关联依赖于ProfileModels,并且可以有0到多个关系。

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

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

请帮忙,现在坚持几个小时

2 个答案:

答案 0 :(得分:4)

没关系,我只是忘了把外键作为virtual

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

答案 1 :(得分:4)

由于Profile

LazyLoading在此处为空。这允许我们拥有一个具有许多不同对象的对象,这些对象仅在需要时加载,而不是在加载父对象时加载。如果您将“注释”属性作为用户的一部分,则此功能尤其有用。如果没有LazyLoading,只要您想抓住VideoModels.ID,就会加载评论集。 LazyLoading的缺点是每次执行导航都需要对数据源进行单独查询。

要允许LazyLoading,您需要将相关对象属性标记为虚拟。

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

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

如果您想使用当前的班级建模,可以通过禁用LazyLoading来实现此目的。

this.Configuration.LazyLoadingEnabled = false;