In un datacontext i valori inseriti non sono disponibili all'interno del datacontext fino a dopo l'invio delle modifiche?

StackOverflow https://stackoverflow.com/questions/658578

Domanda

Sto esaminando un file XML di articoli e i giornalisti che li hanno scritti. Mentre stiamo aggiungendo gli articoli in _Data il nostro datacontext, potremmo imbatterci in un giornalista che ha bisogno di aggiungere, quindi facciamo questo:

newJourno = New journalist With {.name = strJournalist}
_Data.journalists.InsertOnSubmit(newJourno)
.articles_journalists.Add(New articles_journalist With {.id_journalist = newJourno.id,         .id_article = .id})

Tuttavia, in seguito, potremmo imbatterci di nuovo in questo stesso giornalista e, quando lo facciamo, non viene restituito nulla:

Dim journo = _Data.journalists.Where(Function(s) s.name = strJournalist).SingleOrDefault

Quindi usa di nuovo il codice sopra per inserire di nuovo lo stesso giornalista.

Una volta completati tutti i nostri inserti, facciamo un cambio di invio. A questo punto ha un adattamento alla testa:

L'istruzione INSERT è in conflitto con il vincolo COLUMN FOREIGN KEY "FK_articles_journalists_journalists". Il conflitto si è verificato nel database "blah", tabella "giornalisti", colonna "id". La dichiarazione è stata chiusa.

Guardando attraverso il sql generato nel profiler sql puoi vedere che sta cercando di aggiungere alcuni giornalisti più di una volta, questo fallirà perché il nome deve essere distinto. I record successivi che stanno tentando di essere inseriti con questi giornalisti non riescono poiché il giornalista non è stato aggiornato.

Sicuramente se ho una raccolta di giornalisti, aggiungine alcuni e poi guardo nella mia raccolta dovrei vederli tutti e non solo quelli originali. Posso confonderlo, immagino, facendo un cambio di invio, ma sembra un po 'sciocco.

Grazie in anticipo,

Dave.

È stato utile?

Soluzione

Se si desidera aggiungere due righe padre-figlio al database, è necessario assegnare l'entità, anziché la colonna Id, l'id verrà generato automaticamente e sarà disponibile solo dopo le modifiche di invio.

Devi fare un oggetto articles_journalist , e quindi assegnare la nuova entità Journo a questo:

articles_journalist.journalist = newJourno;

Altri suggerimenti

CMS ha ragione sulla necessità di assegnare l'oggetto, non l'id.

Tuttavia, questo non sembra aggirare il problema del datacontext non rendendosi conto che è stato aggiunto nuovo materiale fino a quando non si inviano i cambiamenti. Posso solo presumere che ciò avvenga in base alla progettazione e quindi ora sto chiamando submitchanges come e quando il codice inserisce oggetti che successivamente cercheremo.

" il nome deve essere distinto. "

Questo è un grave difetto di progettazione. I nomi delle persone non sono mai univoci.

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