asp.net - net - Obtener ID de registro en Entity Framework después de insertar
entity framework tutorial español (4)
Estoy desarrollando una aplicación ASP.net usando Entity Framework. Estoy usando DetailsView
para insertar datos en la base de datos. Hay una tabla como Client
y su clave principal es client_id
. client_id
es generado automáticamente por la base de datos. Necesito obtener client_id
generado automáticamente después de insertar un registro en la tabla del Client
y asignarlo a un campo oculto para uso futuro.
Busqué sobre esto y encontré muchas soluciones. Pero no sé cómo usarlos ya que soy nuevo en asp.net. Descubrí que Entity Framework rellena automáticamente los objetos de negocios con los valores generados por la base de datos después de llamar a SaveChanges()
. Mi pregunta es ¿dónde debería llamar a esto en mi clase parcial? Cuál es el evento ?
Estoy usando DetailsView con EntityDataSource y enlazando EntityDataSource directamente con Entity Model, por lo que no estoy creando objetos para insertar datos.
Esto es lo que estoy buscando.
en clase parcial
protected void clientDataSource_OnInserted(object sender, EntityDataSourceChangedEventArgs e )
{
int newPrimaryKey = ((Client)e.Entity).ClientId;
Debug.WriteLine(" Client ID is " + newPrimaryKey);
}
y agregado debajo de la línea en EntityDataSource
en la página aspx.
OnInserted="clientDataSource_OnInserted"
Gracias, pasé 3 días buscando y buscando resultados complicados, ¡pero esta solución es brillante! Aquí está en vb.net:
Protected Sub dvArticulos_ItemInserted(sender As Object, e As EntityDataSourceChangedEventArgs) Handles EntityDataSource1.Inserted
Dim last_Serie As Long = DirectCast(e.Entity, articulos).Serie
Session("Articulo") = last_Serie
End Sub
Tras la llamada a _dbContext.SaveChanges()
, la entidad se actualizará automáticamente con su nuevo valor de campo de identidad.
El siguiente código supone que el nombre del contenedor de entidad de Entity Framework es MyEntities, y la tabla de clientes de su base de datos tiene al menos los dos campos siguientes:
client_id int identity
client_name varchar(25)
Su código podría verse algo como esto:
// Establish DbContext
private readonly MyEntities _dbContext = new MyEntities();
// Create new client table entity and initialize its properties
var clientEntity = new Client { client_name="MyCo" };
// Add it to the ORM''s collection of Client entities
_dbContext.Clients.Add(clientEntity);
// Save the new entity to the database
_dbContext.SaveChanges();
// Return the identity field from the existing entity,
// which was updated when the record was saved to the database
return clientEntity.client_id;
Una vez que haya insertado la entidad, debe actualizarse para que la propiedad que se asigna a la clave primaria en la base de datos tenga el nuevo valor de PK.
Al igual que MyObject.Id
le dará la nueva identificación