NullReferenceException while using Null Propagation



我正在使用.NET Core 2.1.200开发ASP.NET Core MVC应用程序。

我有一个响应模型和一个静态方法来从实体模型构建此响应模型。

public static EntityTypeResponseModel FromEntityType(Entity.EntityType entityType)
{
return new EntityTypeResponseModel
{
Id = entityType.Id,
Name = entityType.Name,
// NullReferenceException
Fields = entityType.EntityTypeFields?.Select(x => FieldResponseModel.FromField(x.Field))
};
}

虽然我使用空传播,但抛出了NullReferenceException。

执行传统的空检查可解决此问题:

public static EntityTypeResponseModel FromEntityType(Entity.EntityType entityType)
{
var entityTypeResponseModel = new EntityTypeResponseModel
{
Id = entityType.Id,
Name = entityType.Name
};
if (entityType.EntityTypeFields != null)
{
entityTypeResponseModel.Fields =
entityType.EntityTypeFields?.Select(x => FieldResponseModel.FromField(x.Field));
}
return entityTypeResponseModel;
}

我错过了什么吗?这是一个错误吗?

这是我自己的错误。该方法FieldResponseModel.FromField一个不得为 null 的字段。

在实体中,我添加了实体(在执行控制器的编辑操作时(,但通过 ID 而不是通过实体对象。通过await _db.SaveChangesAsync()将此对象保存到数据库上下文后,ID 属性的导航属性没有自动设置(这是我所期望的(。

我最终自己从数据库中获取实体并设置实体对象。

// bad
junctionEntity.FieldId = 1
// good
junctionEntity.Field = await _db.Fields.SingleAsync(x => x.Id == 1)

这对有用,可能还有其他解决方案。

相关内容

  • 没有找到相关文章

最新更新