c# - 当我从 ApplicationDbContext 调用时外键对象返回 null

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

从技术上讲,VideoModels 不应与 VideoModels 有任何联系,因为 VideoModels 依赖于 ProfileModels,并且可以有 0 到多的关系。

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

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

请帮忙,卡在这里好几个小时了

最佳答案

由于 LazyLoading

Profile 在这里将为 null。这允许我们拥有一个包含许多不同对象的对象,这些对象仅在需要时加载,而不是在加载父对象时加载。如果您将 Comments 属性作为用户的一部分,这将特别有用。如果没有 LazyLoading,评论集合将在您只想获取 VideoModels.ID 时加载。 LazyLoading 的缺点是执行的每个导航都需要对数据源进行单独查询。

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

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

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

或者

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

this.Configuration.LazyLoadingEnabled = false;

关于c# - 当我从 ApplicationDbContext 调用时外键对象返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30548567/

相关文章:

c# - 如何首先使用实体​​框架代码在数据库中插入空日期时间

c# - 检查远程网络服务器上是否存在 .txt 文件

c# - 代码首先有两个对象有其他对象

asp.net - 有什么理由我不应该自动修剪 html 表单参数吗?

c# - 何时转换 ValueProvider 的 ASP.NET 值?

c# - 使用 Entity Framework 保存对子集合的更改

c# - 尝试访问 Entity Framework 中的表时出现空引用异常

c# - 解析正则表达式

c# - 使用 C# P/Invoke 通过方法编码(marshal)结构

c# - 在 Filter 中读取 Response.Body 流