什么会导致 ObjectMapper.Map 删除实体而不是更新服务?
What can cause ObjectMapper.Map to delete entity rather than update in service?
我对下面显示的 Update
方法有疑问。 Create
工作正常,但是当我尝试 Update
此特定应用程序服务中的实体时,它正在删除而不是更新。
谁能告诉我这个电话可能出了什么问题,为什么会被删除而不是更新?我在其他服务中有多个 Create
和 Update
方法,它们的工作方式与这个完全相同,但没有给我任何问题。
我正在使用 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,所以导致删除。
我对下面显示的 Update
方法有疑问。 Create
工作正常,但是当我尝试 Update
此特定应用程序服务中的实体时,它正在删除而不是更新。
谁能告诉我这个电话可能出了什么问题,为什么会被删除而不是更新?我在其他服务中有多个 Create
和 Update
方法,它们的工作方式与这个完全相同,但没有给我任何问题。
我正在使用 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,所以导致删除。