Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

800
Views
¿Cómo puedo recuperar la identificación de la entidad insertada usando el marco de la entidad?

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 la ID asignada de la entidad, si eliminamos un registro de la tabla, la identidad inicial no coincidirá con la ID de la entidad.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

es bastante fácil Si está utilizando ID generados por DB (como IDENTITY en MS SQL), solo necesita agregar una entidad a ObjectSet y SaveChanges en ObjectContext relacionado. Id se 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 la entidad de forma predeterminada sigue cada INSERT con SELECT SCOPE_IDENTITY() cuando se utilizan Id generados automáticamente.

over 4 years ago · Santiago Trujillo Report

0

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é que publicaría mis hallazgos aquí en- caso la gente busca "solucionar" el problema que tuve.

Considere un objeto 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 era necesario porque tenía una relación de clave externa entre el cliente.Id y el pedido.Id del cliente

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 los pasos adicionales

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

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

over 4 years ago · Santiago Trujillo Report

0

Debe volver a cargar la entidad después de guardar los cambios. Porque ha sido alterado por un activador de base de datos que EF no puede rastrear. Entonces, necesitamos volver a cargar la entidad desde la base de datos,

 db.Entry(MyNewObject).GetDatabaseValues();

Entonces

 int id = myNewObject.Id;

Mire la respuesta de @jayantha en la siguiente pregunta:

¿Cómo puedo obtener la identificación de la entidad insertada en Entity Framework cuando uso defaultValue?

Mirar la respuesta de @christian en la siguiente pregunta también puede ayudar:

Entity Framework Actualizar contexto?

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!