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