¿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.

naspinski
fuente

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;
Tormenta de germen
fuente
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

Jason Stevenson
fuente
2

Prueba esto:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Khalid Salameh
fuente