¿Puedo devolver el campo 'id' después de una inserción LINQ?


182

Cuando ingreso un objeto en la base de datos con Linq-to-SQL, ¿puedo obtener la identificación que acabo de insertar sin hacer otra llamada db? Supongo que esto es bastante fácil, simplemente no sé cómo.

Respuestas:


266

Después de confirmar su objeto en la base de datos, el objeto recibe un valor en su campo ID.

Entonces:

myObject.Field1 = "value";

// Db is the datacontext
db.MyObjects.InsertOnSubmit(myObject);
db.SubmitChanges();

// You can retrieve the id from the object
int id = myObject.ID;

2
Quizás necesite configurar su campo en "base de datos generada" y "actualizar al insertar" para que esto funcione.
— Sam

1
¿Cómo hago esto en C # 4.0? ¿No hay inserciones, envíos o cambios?
— Bat_Programmer

1
@Confused Programmer: es lo mismo, pero con Context.Collection.Add () y SaveChanges ()
— naspinski

El comportamiento puede ser DB específico. Al usar SQLite, esto no dio como resultado que se llenara la ID.
— denver

He usado esto antes, pero ¿cómo hacer que esto funcione en tablas de multirelación? ¿Tengo que guardar las tablas principales primero para obtener la ID de ambas y luego guardar ambas identificaciones en la tabla de relaciones?
— CyberNinja el

15

Al insertar la ID generada se guarda en la instancia del objeto que se está guardando (ver a continuación):

protected void btnInsertProductCategory_Click(object sender, EventArgs e)
{
  ProductCategory productCategory = new ProductCategory();
  productCategory.Name = “Sample Category”;
  productCategory.ModifiedDate = DateTime.Now;
  productCategory.rowguid = Guid.NewGuid();
  int id = InsertProductCategory(productCategory);
  lblResult.Text = id.ToString();
}

//Insert a new product category and return the generated ID (identity value)
private int InsertProductCategory(ProductCategory productCategory)
{
  ctx.ProductCategories.InsertOnSubmit(productCategory);
  ctx.SubmitChanges();
  return productCategory.ProductCategoryID;
}

referencia: http://blog.jemm.net/articles/databases/how-to-common-data-patterns-with-linq-to-sql/#4


2

Prueba esto:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.