Ho un modello che si riferisce a un altro:
public class Portfolio : BaseEntity, IEntityBase
{
public string Name { get; set; }
public Org Organization { get; set; }
public bool IsPrivate { get; set; }
}
Quando provo a salvarlo (indicando il valore del campo organization
su un record esistente nel database), ModelState non è valido ("Organizzazione": l'input non era valido).
Invio l' id
Organization
con il resto del carico utile:
{
"Name": "Port 1",
"Organization": 16
}
e il codice del controller è molto semplice:
[HttpPost]
public IActionResult Create([FromBody]Portfolio item){
if (ModelState.IsValid){
_PortfolioRepo.Add(item);
_PortfolioRepo.Commit();
return new OkObjectResult(item);
}
else{
return BadRequest(ModelState);
}
}
La parte interessante è che quando specifichi il campo Organization
nel payload, l' item
nel metodo Create()
arriverà come null
quindi non posso recuperare manualmente l' Organization
dal suo repository e collegarmi a Portfolio
. Quando ometto l' Organization
, salverà l'entità perfettamente.
Se accludo i dettagli Organization
all'interno del carico utile, l'EF salverà un nuovo record di Organizzazione nel database. Ma come faccio a collegarmi a quello esistente con il salvataggio di un nuovo modello?
Nel tuo modello Portfolio
hai questa proprietà:
public Org Organization { get; set; }
Si prega di notare che il tipo di proprietà è Org
. Quindi impostarlo su un numero non funzionerà per ovvi motivi. Prova a cambiare il tuo modello un po 'in questo modo:
public int OrganizationId { get; set; }
[ForeignKey("OrganizationId")]
public Org Organization { get; set; }
Ciò dirà a EF che la proprietà Organization
è una proprietà di navigazione e che la chiave esterna è OrganizationId
. Impostare la proprietà OrganizationId
e dovrebbe funzionare.