什么会导致 ObjectMapper.Map 删除实体而不是更新服务?

What can cause ObjectMapper.Map to delete entity rather than update in service?

我对下面显示的 Update 方法有疑问。 Create 工作正常,但是当我尝试 Update 此特定应用程序服务中的实体时,它正在删除而不是更新。

谁能告诉我这个电话可能出了什么问题,为什么会被删除而不是更新?我在其他服务中有多个 CreateUpdate 方法,它们的工作方式与这个完全相同,但没有给我任何问题。

我正在使用 ASP.NET Boilerplate v3.5。

调用应用服务:

var map = new CreateOrEditStoreAddressMapDto
{
    Id = 10008
    StoreId = 1000,
    AddressId = 1,
    PrimaryBilling = false,
    PrimaryShipping = true
};

await _storeAddressMapAppService.CreateOrEdit(map);

Table:

[Table("StoreAddressMappings")]
public class StoreAddressMap : CreationAuditedEntity<long>
{
    public virtual long AddressId { get; set; }

    [ForeignKey("AddressId")]
    public virtual Address Address { get; set; }

    public virtual int StoreId { get; set; }

    [ForeignKey("StoreId")]
    public virtual Store Store { get; set; }

    public virtual bool PrimaryBilling { get; set; }

    public virtual bool PrimaryShipping { get; set; }
}

DTO:

public class CreateOrEditStoreAddressMapDto : CreationAuditedEntityDto<long>
{
    public long AddressId { get; set; }

    public AddressDto Address  {get;set;}

    public int StoreId { get; set; }

    public StoreDto Store { get; set; }

    public bool PrimaryBilling { get; set; }

    public bool PrimaryShipping { get; set; }
}

应用服务:

public async Task CreateOrEdit(CreateOrEditStoreAddressMapDto input)
{
    if (input.Id.HasValue) {
        await Create(input);
    } else {
        await Update(input);
    }
}

[AbpAuthorize(AppPermissions.Pages_Administration_StoreAddressMappings_Create)]
private async Task Create(CreateOrEditStoreAddressMapDto input)
{
    var storeAddressMap = ObjectMapper.Map<StoreAddressMap>(input);
    await _storeAddressMapRepository.InsertAsync(storeAddressMap);
}

// THIS IS THE FUNCTION THAT DELETES THE OBJECT RATHER THAN UPDATE IT
[AbpAuthorize(AppPermissions.Pages_Administration_StoreAddressMappings_Edit)]
private async Task Update(CreateOrEditStoreAddressMapDto input)
{
    var storeAddressMap = await _storeAddressMapRepository.FirstOrDefaultAsync((long) input.Id);
    ObjectMapper.Map(input, storeAddressMap);
}

自定义 DTO 映射器:

configuration.CreateMap<CreateOrEditStoreAddressMapDto, StoreAddressMap>();

我想通了。 DTO 有 AddressDto 和 StoreDto,因为它们是 NULL,所以导致删除。