使用空传播时出现 NullReferenceException
NullReferenceException while using Null Propagation
我正在使用 .NET Core 2.1.200.[=12= 开发 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。
进行传统的 null 检查解决了这个问题:
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
需要一个不能为空的字段。
在实体中,我添加了实体(同时通过我的控制器的编辑操作),但通过 ID 而不是通过实体对象。通过 await _db.SaveChangesAsync()
将此对象保存到数据库上下文后,ID-属性 的导航 属性 没有自动设置(这是我所期望的)。
我最终自己从数据库中获取了实体并设置了实体对象。
// bad
junctionEntity.FieldId = 1
// good
junctionEntity.Field = await _db.Fields.SingleAsync(x => x.Id == 1)
这对我有效,可能还有其他解决方案。
我正在使用 .NET Core 2.1.200.[=12= 开发 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。
进行传统的 null 检查解决了这个问题:
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
需要一个不能为空的字段。
在实体中,我添加了实体(同时通过我的控制器的编辑操作),但通过 ID 而不是通过实体对象。通过 await _db.SaveChangesAsync()
将此对象保存到数据库上下文后,ID-属性 的导航 属性 没有自动设置(这是我所期望的)。
我最终自己从数据库中获取了实体并设置了实体对象。
// bad
junctionEntity.FieldId = 1
// good
junctionEntity.Field = await _db.Fields.SingleAsync(x => x.Id == 1)
这对我有效,可能还有其他解决方案。