Entity Framework: cómo agregar entidades que se referencian entre sí sin conocer la clave principal

Soy muy nuevo en Entity Framework, así que disculpe si es una pregunta muy mala, pero no pude encontrar una solución que tenga sentido para mí. Aunque mi problema es complejo, intentaré simplificarlo. Digamos que tengo dos modelos Company y CompanyAddress.

+--------------------Company---------------------------------------+
| int CompanyId
| string CompanyName
|
| virtual <ICollection>CompanyAddress address // Navigation Property
+-------------------------------------------------------------------+

Y,

+--------------------CompanyAddress---------------------------+
| int CompanyAddressId
| string Address
|
| int CompanyAddressId           // Foreign Key to Address Table
| virtual CompanyAddress address // Related Navigation Property
+--------------------------------------------------------------+

Como puede verse, la entidad de la empresa puede tener más de una dirección de la empresa. En mi proyecto ASP.NET MVC también tengo ViewModel.

+--------------------CompanyCreateViewModel----------------+
| Company company
| CompanyAddress address
+---------------------------------------------------------+

Estas dos propiedades se completan a la vista y se pasan al controlador sin problemas. El problema para mí comienza ahora. ¿Cómo debo insertar estas dos entidades?

Digamos que inserto la entidad de la empresa primero que tomo su clave principal con la declaración de selección y asigno este valor a la clave externa de CompanyAddress y la inserto. Sin embargo, esto no tiene sentido para mí, ya que necesito realizar otra solicitud de clave principal.

¿Cómo debo insertar mis entidades, cuál es el mejor enfoque? Perdón por la pregunta larga, y gracias.

preguntado el 30 de junio de 12 a las 17:06

No entiendo esta declaración que hizo "Sin embargo, esto no tiene sentido para mí, ya que necesito hacer otra solicitud de clave principal". - ¿Por qué cree que necesita hacer otra solicitud de la misma clave principal? Una vez que llama a SaveChanges() para la empresa, tiene la clave principal en ese objeto. Asígnelo a la clave externa para CompanyAddress y llame a SaveChanges() nuevamente. -

Mmm, eso no lo sabia. Como dije, soy muy nuevo en orm y ef. De todos modos, eso resolvió mi problema :) escriba como respuesta para que pueda aceptarlo. Gracias... -

1 Respuestas

Una vez que llama a SaveChanges() para la empresa, tiene la clave principal en ese objeto. Asígnelo a la clave externa para CompanyAddress y llame a SaveChanges() nuevamente.

Respondido el 30 de junio de 12 a las 17:06

por cierto, ¿es este un buen enfoque? Estaba pensando en asignar la dirección a la empresa a través de la propiedad de navegación, luego insertar la empresa y la entidad de dirección juntas. ¿En lugar de insertar primero la empresa seguida de la dirección? - emre nevayeshiraz

SI tiene su base de datos configurada correctamente, eso también funciona. Y eso es un paso, no dos. Cuál, es más eficiente :) - elgeekquenecesitas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.