¿Cómo puedo recuperar la identificación de la entidad insertada usando Entity framework?

Resuelto ahmet asked hace 13 años • 0 respuestas

Tengo un problema con Entity Framework en ASP.NET. Quiero obtener el valor de Id cada vez que agrego un objeto a la base de datos. ¿Cómo puedo hacer esto?

Según Entity Framework la solución es:

using (var context = new EntityContext())
{
    var customer = new Customer()
    {
        Name = "John"
    };

    context.Customers.Add(customer);
    context.SaveChanges();
        
    int id = customer.CustomerID;
}

Esto no obtiene la identidad de la tabla de la base de datos, pero obtiene el ID asignado de la entidad; si eliminamos un registro de la tabla, la identidad inicial no coincidirá con el ID de la entidad.

ahmet avatar Mar 07 '11 02:03 ahmet
Aceptado

Es bastante fácil. Si está utilizando identificadores generados por bases de datos (como IDENTITYen MS SQL), solo necesita agregar una entidad dentro ObjectSety SaveChangesfuera de los archivos relacionados ObjectContext. Idse completará automáticamente para usted:

using (var context = new MyContext())
{
  context.MyEntities.Add(myNewObject);
  context.SaveChanges();

  int id = myNewObject.Id; // Yes it's here
}

El marco de entidad de forma predeterminada sigue a cada uno INSERTcuando se utilizan mensajes de correo SELECT SCOPE_IDENTITY()electrónico generados automáticamente .Id

Ladislav Mrnka avatar Mar 06 '2011 19:03 Ladislav Mrnka

Había estado usando la respuesta de Ladislav Mrnka para recuperar con éxito los ID cuando usaba Entity Framework; sin embargo, estoy publicando aquí porque lo había estado usando mal (es decir, usándolo donde no era necesario) y pensé en publicar mis hallazgos aquí en- caso la gente busca "resolver" el problema que tuve.

Considere un objeto de Pedido que tiene una relación de clave externa con el Cliente. Cuando agregué un nuevo cliente y un nuevo pedido al mismo tiempo estaba haciendo algo como esto;

var customer = new Customer(); //no Id yet;
var order = new Order(); //requires Customer.Id to link it to customer;
context.Customers.Add(customer);
context.SaveChanges();//this generates the Id for customer
order.CustomerId = customer.Id;//finally I can set the Id

Sin embargo, en mi caso esto no fue necesario porque tenía una relación de clave externa entre customer.Id y order.CustomerId.

Todo lo que tenía que hacer era esto;

var customer = new Customer(); //no Id yet;
var order = new Order{Customer = customer}; 
context.Orders.Add(order);
context.SaveChanges();//adds customer.Id to customer and the correct CustomerId to order

Ahora, cuando guardo los cambios, la identificación que se genera para el cliente también se agrega al pedido. No necesito pasos adicionales

Soy consciente de que esto no responde a la pregunta original, pero pensé que podría ayudar a los desarrolladores nuevos en EF a no utilizar en exceso la respuesta más votada para algo que quizás no sea necesario.

Esto también significa que las actualizaciones se completan en una sola transacción, lo que potencialmente evita datos huérfanos (ya sea que se completen todas las actualizaciones o ninguna).

mark_h avatar Dec 14 '2016 15:12 mark_h