En un contexto de datos, ¿los valores insertados no están disponibles dentro del contexto de datos hasta después de enviar los cambios?

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

Pregunta

Estoy revisando un archivo XML de artículos y los periodistas que los escribieron. A medida que agreguemos los artículos a _Data nuestro datacontext, podemos encontrarnos con un periodista que necesita agregarse, así que hacemos esto:

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

Sin embargo, posteriormente podemos encontrarnos con este mismo periodista nuevamente y no se devuelve nada cuando hacemos esto:

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

Entonces usa el código de arriba nuevamente para insertar al mismo periodista nuevamente.

Una vez que todos nuestros insertos están listos, hacemos cambios de envío. En este punto tiene un ajuste de cabeza:

La instrucción INSERT está en conflicto con la restricción COLUMN FOREIGN KEY 'FK_articles_journalists_journalists'. El conflicto ocurrió en la base de datos 'bla', tabla 'periodistas', columna 'id'. La declaración ha sido terminada.

Al mirar a través del sql generado en el perfilador sql, puede ver que está intentando agregar algunos periodistas más de una vez, esto fallará ya que el nombre debe ser distinto. Los registros posteriores que intentan insertarse con estos periodistas fallan porque el periodista no se actualizó.

Seguramente si tengo una colección de periodistas, agregue algunos y luego mire en mi colección, debería verlos a todos y no solo a los originales. Supongo que puedo evitarlo haciendo un cambio de envío, pero eso parece un poco tonto.

Gracias de antemano,

Dave.

¿Fue útil?

Solución

Si desea agregar dos filas hijo-padre a la base de datos, debe asignar la entidad, en lugar de la columna Id, el Id se generará automáticamente y estará disponible solo después de los cambios de envío.

Debe hacer un objeto articles_periodista y luego asignar la entidad newJourno a esto:

articles_journalist.journalist = newJourno;

Otros consejos

CMS tiene razón acerca de la necesidad de asignar el objeto, no la identificación.

Sin embargo, esto no parece solucionar el problema del contexto de datos sin darse cuenta de que se le han agregado cosas nuevas hasta que envíe los cambios. Solo puedo suponer que esto es por diseño y, por lo tanto, ahora estoy llamando a submitchanges cuando el código inserta objetos que luego buscamos.

" el nombre debe ser distinto. "

Este es un serio defecto de diseño. Los nombres de las personas nunca son únicos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top