Я создаю API для проверки концепции, используя ASP.NET Core 2.1, Web.API и OData (7.0.0-beta4).
Одна из моих конечных точек OData отвечает за базовыеОперации CRUD для объекта Employer
.Конечная точка POST
- которая создает новую Employer
запись - определяется следующим образом:
// POST: api/Employers
[HttpPost]
public async Task<IActionResult> PostEmployer([FromBody] Employer employer)
{
if (!ModelState.IsValid)
return BadRequest(ModelState);
_context.Employers.Add(employer);
await _context.SaveChangesAsync();
return CreatedAtAction("GetEmployer", new { id = employer.Id }, employer);
}
Моя Employer
сущность определяется следующим образом:
namespace MyProject.Models
{
public class Employer
{
public int Id { get; set; }
public string Name { get; set; }
public bool IsActive { get; set; }
}
}
ЕслиЯ попал в эту конечную точку OData с телом POST
следующим образом:
{
"Name": "My Employer",
"IsActive": true
}
Я получаю сообщение об ошибке:
InvalidOperationException: No route matches the supplied values.
Это потому, что свойство Id
является обязательным, ноне предусмотрено в моем JSON.Однако я не хочу предоставлять свойство Id
, потому что это свойство будет автоматически сгенерировано базой данных.Если я do предоставляю свойство Id
, мой запрос будет успешно перенаправлен, но позже в процессе будет получена ошибка Entity Framework (Cannot insert explicit value for identity column
), что имеет смысл.
Какя могу заставить мою конечную точку OData игнорировать обязательное свойство Id
во время запроса POST
?