Hello,
I need a little help to understand where is a problem.
I have 4 tables: SparePart, SpareType, MachineType, Pdm
Relationship is next: SparePart has FK from SpareType and from MachineType, Pdm has FK from SpareType
Now,when I want to insert record into Pdm I'm getting some error related to SpareType and Machine Type are required, even if they are shown in viewModel parameters, whyModelState.IsValid is false ?
Here are code from all view models.
SparePartViewModel.cs
public class SparePartViewModel
{
public Int64? Id { get; set; }
public DateTime CreateDate { get; set; }
[Required]
[StringLength(100)]
public string InternalCode { get; set; }
[StringLength(4096)]
public string Description { get; set; }
[StringLength(255)]
public string NameOnFolder { get; set; }
public decimal? Enter { get; set; }
public decimal? Exit { get; set; }
public decimal? Thickness { get; set; }
public string Band { get; set; }
public string Color { get; set; }
public bool Elastic { get; set; }
[Required]
public virtual MachineType MachineType { get; set; }
[Required]
public virtual SpareType SpareType { get; set; }
}
SpareTypeViewModel.cs
public class SpareTypeViewModel
{
public Int64 id { get; set; }
public DateTime CreateDate { get; set; }
[Required]
public string Name { get; set; }
}
MachineTypeViewModel.cs
public class MachineTypeViewModel
{
public Int64 id { get; set; }
public DateTime CreateDate { get; set; }
[Required]
public string Name { get; set; }
}
PdmViewModel.cs
public class PdmViewModel
{
public Int64 Id { get; set; }
public DateTime CreateDate { get; set; }
[Required]
public string PdmCode { get; set; }
[Required]
public virtual SparePart SparePart { get; set; }
}
Picture from debug:
![]()
Here is the code from controller method where is called post
[HttpPost]
public async Task<IActionResult> Post([FromBody] PdmViewModel viewModel)
{
string[] entities = { "MachineType", "SpareType" };
viewModel.SparePart = _repoSparePart.SearchByName(w => w.InternalCode == viewModel.SparePart.InternalCode, entities);
if (ModelState.IsValid)
{
var newPdm = Mapper.Map<Pdm>(viewModel);
newPdm.CreateDate = DateTime.Now;
var exist = _repoPdm.SearchByName(w => string.Equals(w.PdmCode, viewModel.PdmCode, StringComparison.CurrentCultureIgnoreCase));
if (exist != null)
{
TempData["pdm"] = "Pdm Already Exist.";
}
else
{
_repoPdm.Insert(newPdm);
if (await _repoSparePart.SaveChangesAsync())
{
TempData["pdm"] = "Pdm Code successfully created.";
return Created($"pdm/{newPdm.PdmCode}", Mapper.Map<Pdm>(viewModel));
}
}
}
return BadRequest("Failed to save.");
}