Domanda

Sto cercando di ottenere un modello di presentazione (discusso qui e qui) lavorando in Ria. Tutti gli esempi che riesco a trovare sono entità dati semplici e pianeggianti con nessuna relazione 1 o molte relazioni, che sono ciò che non riesco a lavorare, in particolare, su aggiornamenti e inserti in relazioni associative.

Query che posso funzionare bene - Ho le mie classi di presentazione contrassegnate con gli attributi dell'associazione (e includere gli attributi, se del caso) e ho una buona comprensione di come i dati vengono caricati sul lato client e mantenuti lì come entità. Ho anche inserti di nuove entità coperte. Tuttavia, sto riscontrando i seguenti problemi. Per i seguenti esempi, supponiamo che abbiamo semplici album ed entità per artisti, in cui un album ha un singolo artista e un artista può avere zero per molti album. Entrambi hanno una proprietà del nome.

  • Sul lato client, se faccio myartist.albums.add (analbum) o myartist.albums.remove (analbum), non succede nulla. Haschanges ritorna falso. (Si noti che il miartista e l'analbum sono stati ottenuti esclusivamente in codice caricando le entità e iterando per ottenere riferimenti a entità specifiche: non sto ancora facendo nulla in UI o con i domaindatasources, solo drogando).
  • Se aggiorno il nome su un artista e su un sottomissione, quando il metodo di aggiornamento viene chiamato sul server, la raccolta di album è null.

Qualcuno ha qualche suggerimento o puoi indicarmi un esempio che utilizza oggetti più complessi?

MODIFICARE (Mantenendo quanto sopra per i posteri): va bene, sembra che il secondo problema (un riferimento a un'entità o una raccolta di entità che mostrano come null quando l'aggiornamento viene chiamato sul server) esiste perché i bambini entiti non sono contrassegnati come modificati e Quindi non vengono serializzati e rimandati. So che puoi costringerlo ad accadere usando [composizione] e l'ho fatto funzionare in quel modo, ma questa non è una relazione compositiva e voglio che entrambe le entità siano entità "di alto livello". Come posso contrassegnare un'entità come cambiata?

È stato utile?

Soluzione

Il problema era che i miei attributi [associazioni] non erano definiti correttamente. Non mi rendevo conto che la proprietà del nome dell'associazione doveva essere la stessa su entrambi i lati dell'associazione. Quando i nomi sono uguali e si esegue una build, il codice generato sul client utilizza un costruttore diverso per l'entità che viene utilizzato dal "genitore" per fare riferimento ai "figli" rispetto a . Il nuovo costruttore prende callback che eseguono un po 'di gestione extra quando chiami Aggiungi e rimuovi sulla raccolta - in particolare, prendono l'entità figlio che stai aggiungendo o rimuovendo e modificano la proprietà su di essa che si riferisce al suo genitore in modo che tutto rimanga In sincronizzazione: la raccolta da cui hai rimosso l'oggetto, la raccolta a cui è stato aggiunto e il riferimento dell'oggetto al suo genitore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top