【问题标题】:What can cause ObjectMapper.Map to delete entity rather than update in service?什么会导致 ObjectMapper.Map 删除实体而不是在服务中更新?
【发布时间】:2018-03-22 13:40:55
【问题描述】:

我对下面显示的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("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>();

【问题讨论】:

    标签: c# automapper aspnetboilerplate


    【解决方案1】:

    我能够弄清楚。 DTO 有 AddressDto 和 StoreDto,因为它们是 NULL,所以导致删除。

    【讨论】:

    • @AlperEbicoglu 我必须等待 2 天才能接受我自己的答案 - 堆栈内存溢出 :)
    猜你喜欢
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多