首页 > 解决方案 > 具有 ASP.NET 一对多关系的实体框架导致 NullReference 错误

问题描述

在我的数据库中,我有两个实体:DbStatus 和 DbTask

public class DbStatus
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<DbTask> Tasks { get; set; }
}

public class DbTask
{
    public int Id { get; set; }
    public string Title { get; set; }
    public bool Done { get; set; }
    public int StatusId { get; set; }
    public virtual DbStatus Status { get; set; }
}

在该OnModelCreating方法中,我使用以下代码建立关系:

modelBuilder.Entity<DbStatus>()
            .HasMany(s => s.Tasks)
            .WithOne(t => t.Status)
            .HasForeignKey(t => t.StatusId);

我还在这个方法中添加了一些示例数据,设置StatusId新创建的DbTasks.

问题是,当我尝试访问using的Status名称时DbTask

task.Status.Name

我得到一个NullReferenceException.

谁能帮助我如何正确建立关系?

重要的

对于阅读本文的任何人,Rob 提供了最快的解决方案(以及满足特定任务标准的解决方案)。但是,您应该阅读并实施 Steve Py 提供的解决方案,因为他们也在回答中描述了原因!

标签: asp.netentity-frameworkrelationship

解决方案


从数据库中获取列表时DbTasks,您需要告诉它包含子Status对象。

尝试这样的事情:

var tasks = dbContext.DbTasks
    .Include(t => t.Status)
    .ToList();

推荐阅读