asp.net-core - 无效操作异常。尝试保存更改时值未知
问题描述
我有活动并且有可以参加的用户。为了将事件与用户联系起来,我创建了一个新实体(表)作为链接参考(毫米)。
现在,我有点卡住了。在向事件添加新用户时,我收到异常:“尝试保存更改时,'BoardZoneEventCustomer.BoardZoneEventId' 的值是未知的。这是因为该属性也是关系中主体实体所在的外键的一部分未知。”
但在这个问题之前,我能够插入新行......现在它已经坏了。花了很多时间来解决它。
控制器:
[HttpPost("enroll")]
public async Task<IActionResult> Enroll([FromBody] EventCustomerCreationDto eventCustomer)
{
var eventCustomerAdd = _mapper.Map<EventCustomerDto>(eventCustomer);
var eventCustomerCreated = await _eventCustomerService.AddAsync(eventCustomerAdd);
return new ObjectResult(eventCustomerCreated) { StatusCode = 201 };
}
服务(mm表):
public async Task<EventCustomerDto> AddAsync(EventCustomerDto eventCustomerDto)
{
var customer = await _customerRepository.GetByIdAsync(eventCustomerDto.CustomerId);
var eventId = await _eventRepository.GetIdAsync(eventCustomerDto.BoardZoneEventId);
var bzEvent = new BoardZoneEventCustomer
{
Customer = customer,
BoardZoneEvent = eventId
};
if (await _eventCustomerRepository.IsDublicated(eventCustomerDto.CustomerId, eventCustomerDto.BoardZoneEventId))
{
throw new CustomerDublicateEnrollingException("Already registered.");
}
await _eventCustomerRepository.AddAsync(bzEvent);
return _mapper.Map<EventCustomerDto>(bzEvent);
}
忘记发布模型:
public class EventCustomerCreationDto
{
public int BoardZoneEventId { get; set; }
public string CustomerId { get; set; }
}
public class EventCustomerDto
{
public int BoardZoneEventId { get; set; }
public BoardZoneEventDto BoardZoneEvent { get; set; }
public string CustomerId { get; set; }
public CustomerDto Customer { get; set; }
}
public class BoardZoneEventDto
{
public int Id { get; set; }
public string Name { get; set; }
public DateTime StartDate { get; set; }
public DateTime EndDate { get; set; }
public string Country { get; set; }
public string City { get; set; }
public decimal Price { get; set; }
public int? MaxParticipantsNumber { get; set; }
public int AlreadyRegisteredParticipants { get; set; }
public string Description { get; set; }
public int FileEntityId { get; set; }
public BoardZoneEventType EventType { get; set; }
}
解决方案
尝试这个
public async Task<EventCustomerDto> AddAsync(EventCustomerDto eventCustomerDto)
{
// I moved this validation at the top where it makes sense
if (await _eventCustomerRepository.IsDublicated(eventCustomerDto.CustomerId, eventCustomerDto.BoardZoneEventId))
{
throw new CustomerDublicateEnrollingException("Already registered.");
}
// ----- what do you need it for ????
var customer = await _customerRepository.GetByIdAsync(eventCustomerDto.CustomerId);
var eventId = await _eventRepository.GetIdAsync(eventCustomerDto.BoardZoneEventId);
//--------------
var bzEvent = new BoardZoneEventCustomer
{
CustomerId = eventCustomerDto.CustomerId,
BoardZoneEventId = eventCustomerDto.BoardZoneEventId
};
await _eventCustomerRepository.AddAsync(bzEvent);
return eventCustomerDto;
// why do you need to map it?
return _mapper.Map<EventCustomerDto>(bzEvent);
}
推荐阅读
- github - GitHub页面直接访问子链接返回404错误
- android - 有趣的 getValue 没有类型参数:任何?
- javascript - Promise.all 用法的区别
- node.js - 请求 Paypal 沙箱时跨域请求被阻止,但不同的本地主机端口工作正常
- php - 用PHP数组中的循环替换单个数组值?
- javascript - 使用cheerio在html中获取元素名称
- javascript - 包括在 Shiny 模块中调用 Javascript 的命名空间
- scala - TypeError:PySpark 中的 Xgboost 无法调用“JavaPackage”对象
- python - 如何避免 pandas 的 concate 和 to_csv 函数中的空集?
- karate - 发送第二个请求 nb 次作为使用空手道为第一个请求返回的 nb 个项目