2010-12-14 48 views
6

Soy un recién llegado relativo a EF y he creado un modelo simple (ver a continuación) usando EF4. alt textEntity Framework - Inserción en varias tablas usando la clave externa

Estoy teniendo un problema de insertar un nuevo registro en la entidad UserRecord y posteriormente la adición de la entidad UserDetail que utiliza el UserRecordId recién creado como su clave primaria. El código que se muestra a continuación solía funcionar cuando mi base de datos tenía una relación de uno a varios, pero cuando cambio esta a una relación de uno a uno, aparece el error resaltado en la imagen a continuación. alt text

Creo que no está funcionando, ya que ahora no hay ninguna propiedad UserDetails asociada con UserRecord porque ahora es una relación de uno a uno. Mi pregunta es ¿cómo puedo ahora insertar el nuevo UserRecord y las entidades UserDetail correspondientes con una relación de uno a uno?

Cualquier ayuda en esta es muy apreciada, como lo han sido en la búsqueda en la web y probar una variedad de cosas diferentes sin éxito.

Saludos

Cragly

Respuesta

15

Su objeto UserDetail debe tener una propiedad que une de nuevo al objeto UserRecord. (Tal vez se llame User? Si estoy leyendo la sección de navegación a continuación correctamente). Si configura esa propiedad en su nuevo objeto UserRecord no comprometido, automáticamente completará la clave cuando confirme ambos objetos.

UserRecord userRecord = new UserRecord(); 
// whatever 

UserDetail userDetail = new UserDetail(); 
userDetail.User = userRecord; // This will auto-fill the FK during commit. 
// whatever 

// Add both userRecord and userDetail to the context and commit. 
+1

¡Fantástico! Muchas gracias funciona de manera brillante. Parece que estaba tratando de hacerlo de forma incorrecta y buscando agregar UserDetails a UserRecord en lugar de al revés. ¡Me salvaste un poco más de pérdida de cabello que puedo salvar hasta que llegue a mi próxima pared EF de ladrillo! – Cragly

+0

Sí. Intenté esto de muchas otras formas en mi sistema, incluido un intento de confirmación en dos fases. Esto es lo único que funcionó para mí, y es excepcionalmente elegante e intuitivo para arrancar. – jdmichal

Cuestiones relacionadas