Crear, agregar, modificar y eliminar objetos (Entity Framework)

Los objetos de un contexto del objeto son instancias de tipos de entidad que representan los datos en el origen de datos. Puede modificar, crear y eliminar objetos de un contexto y Entity Framework realizará el seguimiento de los cambios efectuados en estos objetos. Cuando se llama al método SaveChanges, Entity Framework genera y ejecuta comandos que llevan a cabo instrucciones equivalentes de inserción, actualización o eliminación con el origen de datos. Para obtener más información, vea Guardar los cambios y administrar la simultaneidad (Entity Framework).

Asignar las funciones de inserción, actualización y eliminación a procedimientos almacenados

Entity Framework permite asignar las operaciones de inserción, actualización y eliminación de un tipo de entidad a procedimientos almacenados. Si está pensando en asignar procedimientos almacenados a sus entidades, es recomendable asignar las tres operaciones. Si, por ejemplo, asigna un tipo de entidad a procedimientos almacenados de inserción y actualización, pero no la asigna al procedimiento almacenado de eliminación y, a continuación, intenta eliminar un objeto de ese tipo, la operación de eliminación producirá un error en tiempo de ejecución con una excepción UpdateException. Para obtener más información, vea How to: Map Modification Functions to Stored Procedures y Walkthrough: Mapping an Entity to Stored Procedures.

Crear y agregar objetos

Si desea insertar datos en el origen de datos, debe crear una instancia de un tipo de entidad y agregar el objeto a un contexto del objeto. Para poder guardar un objeto nuevo en el origen de datos, primero debe establecer todas las propiedades que no admitan los valores null. Cuando trabaje con clases generadas por Entity Framework , considere el uso del método estático CreateNombreObjeto del tipo de entidad para crear una nueva instancia de un tipo de entidad. Las herramientas de Entity Data Model incluyen este método en cada clase cuando generan los tipos de entidad. Este método de creación se usa para crear una instancia de un objeto y establecer las propiedades de la clase que no pueden ser null. El método incluye un parámetro para cada propiedad que tenga aplicado el atributo Nullable="false" en el archivo de CSDL. Para obtener más información, vea Cómo: Crear un objeto con el método de creación estático (Entity Framework).

Cuando trabaje con entidades POCO (objetos CLR "antiguos") utilice el método CreateObject para crear un nuevo objeto en lugar de utilizar el operador new. El método CreateObject envuelve la nueva instancia POCO en el objeto proxy adecuado. Para obtener más información, vea Trabajar con entidades POCO (Entity Framework).

Puede agregar los nuevos objetos a un contexto de objetos utilizando uno de los siguientes métodos:

Al agregar objetos nuevos deben tenerse en cuenta las consideraciones siguientes:

  • Antes de llamar a SaveChanges, Entity Framework genera un valor de clave temporal para cada nuevo objeto. Una vez que se ha llamado a SaveChanges, el valor de identidad que el origen de datos asigna reemplaza el valor de clave cuando se inserta una nueva fila.

  • Si el origen de datos no genera el valor de clave de una entidad, tendrá que asignar un valor único. Si dos objetos tienen el mismo valor de clave especificado por el usuario, se produce una InvalidOperationException cuando se llama a SaveChanges. Si esto se produce, tendrá que asignar valores únicos y reintentar la operación.

Eliminar objetos

Al llamar al método DeleteObject sobre ObjectSet, o al método DeleteObject sobre ObjectContext, se marca el objeto especificado para su eliminación. La fila no se elimina del origen de datos hasta que se llama a SaveChanges. El comportamiento de eliminar objetos difiere en Entity Framework dependiendo del tipo de relación al que pertenece el objeto.

En una relación de identificación, donde una clave principal de la entidad principal forma parte de la clave principal de la entidad dependiente, al eliminar un objeto se pueden eliminar también los objetos relacionados. Los objetos dependientes no pueden existir sin una relación definida con el objeto primario. Al eliminar el objeto primario, también se eliminan todos los objetos secundarios. Esto es igual que habilitar el atributo <OnDelete Action="Cascade" /> en la asociación para la relación.

En una relación no de identificación que se representa como una asociación de clave externa, Entity Framework establece las propiedades de clave externa (que aceptan valores nulos) de los objetos dependientes en null cuando se elimina el objeto principal.

Para obtener más información, vea OnDelete (Elemento) (CSDL) y Definir y administrar relaciones (Entity Framework).

Modificar objetos

Entity Framework realiza el seguimiento de los cambios en los objetos asociados a un ObjectContext. Las herramientas de Entity Data Model generan un par de métodos parciales denominados OnPropiedadChanging y OnPropiedadChanged. Se llama a estos métodos en el establecedor de propiedad. Extienda estos métodos en clases parciales para insertar una lógica de negocios personalizada durante los cambios de propiedad. Para obtener más información, vea Cómo: Ejecutar la lógica empresarial durante los cambios de propiedades escalares (Entity Framework). Si desea obtener una orientación para trabajar con entidades POCO, vea Realizar el seguimiento de los cambios en entidades POCO (Entity Framework).

Al modificar objetos deben tenerse en cuenta las consideraciones siguientes:

  • Cuando se cambia cualquier propiedad escalar o compleja de un objeto complejo, el estado del objeto entidad de nivel superior se cambia a Modified. En las entidades POCO que no cumplen los requisitos para la generación de proxy, descritos en Requisitos para crear objetos proxy POCO (Entity Framework), el estado de las propiedades modificadas se cambiará a Modified cuando se llame al método DetectChanges.

  • No se realiza el seguimiento de los cambios cuando los objetos están en el estado Detached. Los objetos están en este estado cuando los devuelve una consulta que utiliza la opción de mezcla NoTracking o después de desasociarse de ObjectContext al llamar a Detach.

  • Al cambiar una asociación de clave externa, el estado del objeto dependiente cambia a Modified. Al cambiar una asociación independiente, el estado del objeto dependiente no cambia.

Para obtener información sobre cómo realizar el seguimiento de los cambios en entidades POCO, vea Realizar el seguimiento de los cambios en entidades POCO (Entity Framework).

Agregar objetos a un EntitySet específico

Pueden darse casos en los que un tipo de entidad pertenece a varios conjuntos de entidades. Por ejemplo, en el caso en el que una base de datos tiene dos tablas con esquemas idénticos. Éste puede ser el caso si desea dividir los datos para generar un proceso de copia de seguridad más eficaz. Por ejemplo, podría tener datos de clientes divididos entre las tablas Customer y CustomerArchive, donde CustomerArchive tiene el mismo esquema que Customer, pero se utiliza para clientes que no han realizado pedidos en más de seis meses. Se podrían realizar copias de seguridad diarias de Customer, mientras que solo se realizarían semanalmente para CustomerArchive. De una perspectiva de asignación, Customer y CustomerArchive deben pertenecer a diferentes conjuntos de entidades. El Entity Framework admite este escenario permitiendo a un tipo de entidad existir en uno o más conjuntos de entidades. Para obtener más información, vea EntitySet (Elemento) (CSDL).

Cuando un tipo de entidad existe en varios conjuntos de entidades, Entity Framework permite agregar nuevas instancias del tipo a un conjunto específico de entidades. A partir de la versión 4 de .NET Framework, una clase ObjectContext generada para un modelo específico tiene propiedades de tipo ObjectSet que representan los conjuntos de entidades del modelo. Use el método AddObject para agregar nuevos objetos al contexto. Para obtener más información, vea Trabajar con ObjectSet (Entity Framework). En la versión 3.5 SP1 de .NET Framework, debe especificar el valor de entitySetName al llamar al método AddObject para agregar el objeto al contexto.

En esta sección

Cómo: Agregar, modificar y eliminar objetos (Entity Framework)

Cómo: Crear un objeto con el método de creación estático (Entity Framework)

Vea también

Tareas

Cómo: Definir un modelo con múltiples conjuntos de entidades por tipo (Entity Framework)
Cómo: Agregar, modificar y eliminar objetos (Entity Framework)

Conceptos

Definir y administrar relaciones (Entity Framework)
Trabajar con entidades POCO (Entity Framework)
Trabajar con ObjectSet (Entity Framework)
Trabajar con ObjectSet (Entity Framework)
OnDelete (Elemento) (CSDL)