6

Ho creato un servizio mobile azzurro che consiste essenzialmente di 2 entità e 2 controllori di tabella. Queste due entità hanno una relazione 1: 1.Creazione di un'entità con riferimento a un'altra entità nel servizio mobile blu

public class Entity1 : EntityData 
{ 
    public int Value { get; set; } 
    public DateTime Date { get; set; } 
    public string Name { get; set; } 
    public virtual Entity2 Reference { get; set; } 
} 

public class Entity2 : EntityData 
{ 
    public string Name { get; set; } 
} 

I controller sono i controller generati dallo scaffold generati. Quando sono tenta di inserire un esempio Entity1 con un riferimento a un entity2 già esistente ottengo il seguente messaggio:

{"$id":"1","message":"The operation failed due to a conflict: 'Violation of 
PRIMARY KEY constraint 'PK_Service.Entity2'. Cannot insert 
duplicate key in object 'Service.Entity2'. The duplicate key 
value is (32aec44a282e42b7bc51096052335dad).\r\nThe statement has been 
terminated.'."} 

ho usato il seguente JSON nel corpo della richiesta:

{ 
    "value": 1, 
    "date": "2015-04-27T06:51:47.641Z", 
    "name": "name", 
    "project": { 
    "id": "32aec44a282e42b7bc51096052335dad", 
    } 
} 

E ' possibile utilizzare un'entità già esistente come riferimento nel servizio .NET First/Azure Mobile Service? Non sono del tutto sicuro che questa sia una domanda relativa a EF CodeFirst o al servizio mobile azzurro.

Grazie.

risposta

0

Il comportamento predefinito è per l'inserimento di Entity1 anche per tentare un inserimento del riferimento nidificato. Se quel valore è già stato inserito, potrebbe verificarsi un conflitto come questo.

Una possibilità potrebbe essere quella di modificare il codice di inserimento per trattare l'elemento nidificato come già inserito, come nella sezione "Collegamento di un soggetto esistente al contesto" di https://msdn.microsoft.com/en-us/data/jj592676.aspx

Per di più, questo post del blog potrebbe essere utile : http://blogs.msdn.com/b/azuremobile/archive/2014/06/18/insert-update-related-data-with-1-n-relationship-using-net-backend-azure-mobile-services.aspx

+0

Quindi, sai se questo è il lo stesso per gli aggiornamenti? Sto riscontrando lo stesso problema con una patch/aggiornamento quando l'oggetto include dati correlati. Ho un profilo che ha una collezione di numeri di telefono. Quando aggiorno il profilo sul dispositivo mobile e spingo le modifiche in azzurro, ottengo lo stesso conflitto 409 dicendo che non posso inserire i numeri di telefono perché esistono già. Perché sta cercando di inserire i dati relativi su un aggiornamento/patch? Cosa posso ignorare per impedirlo? – jmichas

0

Stavamo cercando di fare la stessa cosa, ma non ci importava dell'aggiornamento delle entità correlate. Se si desidera aggiornare un'entità che contiene riferimenti alle entità collegate, si può semplicemente collegare al contesto e non sarà possibile ottenere gli eventuali errori di violazione PK:

enter image description here