web-dev-qa-db-fra.com

Puis-je renvoyer le champ 'id' après une insertion LINQ?

Lorsque j'entre un objet dans la base de données avec Linq-to-SQL, puis-je obtenir l'ID que je viens d'insérer sans effectuer un autre appel à une base de données? Je suppose que c'est assez facile, je ne sais pas comment. 

175
naspinski

Une fois que vous avez validé votre objet dans la base de données, l'objet reçoit une valeur dans son champ ID.

Alors:

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;
259
Germstorm

Lors de l'insertion, l'ID généré est enregistré dans l'instance de l'objet en cours de sauvegarde (voir ci-dessous):

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;
}

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

15
Jason Stevenson

Essaye ça:

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