asp.net - 具有 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 提供的解决方案,因为他们也在回答中描述了原因!
解决方案
从数据库中获取列表时DbTasks
,您需要告诉它包含子Status
对象。
尝试这样的事情:
var tasks = dbContext.DbTasks
.Include(t => t.Status)
.ToList();
推荐阅读
- apache - 如何正确安装 SSL 到我的服务器?
- reactjs - props.history.push() 不重定向
- flask - 如何使用 SQLalchemy 和 Alembic 自动初始化数据库?
- php - 我所有表格行上的PHP“警告:非法字符串偏移”
- spring - 在使用 aws s3 sdk 依赖项时减少 Spring Boot 应用程序的构建大小
- regex - 使用正则表达式验证 Laravel 国家/地区代码
- gitlab - Gitlab CI执行错误但管道成功
- sails.js - 如何修复“使用 `sails-mongo` 时,主键必须有 `columnName: '_id'`”
- java - 如何制作 Java 代理/缓存文件系统 (VFS)
- android - 解决后无法更改配置“:testCompile”的策略