Asociar objetos (Entity Framework)

Cuando una consulta se ejecuta dentro de un contexto del objeto en Entity Framework, los objetos devueltos se asocian automáticamente al contexto del objeto. También puede asociar a un contexto del objeto los objetos que se obtengan de un origen que no sea una consulta. Puede asociar los objetos que se han desasociado previamente, los objetos devueltos por una consulta NoTracking o los objetos obtenidos fuera del contexto del objeto. Igualmente, puede asociar los objetos que han sido almacenados en el estado de vista de una aplicación ASP.NET o que se han devuelto en una llamada a un método remoto o en un servicio web.

Utilice uno de los métodos siguientes para asociar el objeto a un contexto del objeto:

  • Llame a AddObject en ObjectContext para agregar el objeto al contexto del objeto. Haga esto cuando el objeto sea nuevo y no exista todavía en el origen de datos.

  • Llame a Attach en ObjectContext para asociar el objeto al contexto del objeto. Hágalo cuando el objeto ya exista en el origen de datos, pero no esté todavía asociado al contexto. Para obtener más información, vea Cómo asociar objetos relacionados (Entity Framework).

  • Llame a AttachTo en ObjectContext para asociar el objeto a un conjunto de entidades concreto en el contexto del objeto. Haga esto también si el objeto tiene un valor null (Nothing en Visual Basic) en EntityKey.

  • Llame a ApplyPropertyChanges en ObjectContext. Haga esto cuando el objeto ya exista en el origen de datos y el objeto desasociado tenga actualizaciones de propiedades que desee conservar. Si simplemente asocia el objeto, los cambios de las propiedades se pierden. Para obtener más información, vea Cómo aplicar los cambios realizados a un objeto desasociado (Entity Framework).

Las consideraciones siguientes son válidas al asociar objetos al contexto del objeto:

  • Si el objeto que se asocia tiene objetos relacionados, esos objetos también se asocian al contexto del objeto.

  • Para utilizar Attach para asociar un objeto, el objeto debe implementar IEntityWithKey y tener una clave válida.

  • Los objetos se asocian al contexto del objeto en un estado Unchanged.

  • Si el objeto asociado no existe en el origen de datos, no se agrega durante SaveChanges. En este caso, cuando se realizan cambios en las propiedades, se produce una excepción en el servidor durante SaveChanges. Para agregar un objeto, utilice AddObject en lugar de Attach.

  • Si el objeto que se asocia está relacionado con otros objetos, debe definir explícitamente las relaciones de alguna de las maneras siguientes:

    • Asocie ambos objetos al contexto del objeto y, a continuación, llame a Attach en EntityCollection o EntityReference para definir la relación.

    • Si no hay asociado ningún objeto, llame a Add en EntityCollection y especifique el objeto relacionado o establezca la propiedad Value de EntityReference en el objeto relacionado. Luego, asocie la raíz del gráfico de objetos al contexto del objeto. Puede utilizar este método para crear un gráfico de objetos a partir de los objetos desasociados y, a continuación, asociar el gráfico al contexto del objeto.

    Estos métodos se usan al asociar los objetos relacionados que se serializaron utilizando la serialización XML. Para obtener más información, vea Cómo asociar objetos relacionados (Entity Framework).

  • Si el objeto que se va a asociar tiene valores de propiedades actualizados, utilice ApplyPropertyChanges para aplicar las actualizaciones en el objeto existente. Para obtener más información, vea Cómo aplicar los cambios realizados a un objeto desasociado (Entity Framework).

  • El objeto que se pasa al método Attach debe tener un valor de EntityKey válido. Si el objeto no tiene un valor de EntityKey válido, use el método AttachTo para especificar el nombre del conjunto de entidades.

  • Se produce una excepción InvalidOperationException cuando el objeto que se va a asociar tiene la misma EntityKey que un objeto diferente ya presente en el contexto del objeto. Este error no se produce cuando la misma instancia del objeto está ya en el contexto del objeto; se puede llamar a Attach varias veces en la misma instancia del objeto mientras el objeto esté en estado Unchanged.

  • Utilice el método AttachTo para asociar objetos a un conjunto de entidades concreto. Para obtener más información, vea Agregar, modificar y eliminar objetos (Entity Framework).

  • Cuando el objeto que se va a asociar utilizando el método AttachTo ya tiene definida su clave de entidad, se produce una excepción InvalidOperationException si el valor del parámetro entitySetName no coincide con el nombre del conjunto de entidades en la clave existente.

Vea también

Conceptos

Desasociar objetos (Entity Framework)
Servicios web y Entity Data Model (escenarios de aplicación)

Otros recursos

Administrar el contexto del objeto (Entity Framework)