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


182

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 faire un autre appel à la base de données? Je suppose que c'est assez facile, je ne sais pas comment.

Réponses:


266

Après avoir 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;

2
Vous devrez peut-être définir votre champ sur "base de données générée" et "mise à jour à l'insertion" pour que cela fonctionne.
— Sam le

1
comment puis-je faire cela en c # 4.0 ?? il n'y a pas d'insertonsubmit ou submitchanges ??
— Bat_Programmer

1
@Confused Programmer - c'est la même chose, mais avec Context.Collection.Add () et SaveChanges ()
— naspinski

Le comportement peut être spécifique à la base de données. Lors de l'utilisation de SQLite, cela n'a pas entraîné le remplissage de l'ID.
— denver

Je l'ai déjà utilisé, mais comment faire fonctionner cela sur des tables multirelations? Dois-je enregistrer les tables principales d'abord obtenir l'ID des deux, puis enregistrer les deux ID dans la table de relations?
— CyberNinja

15

Lors de l'insertion, l'ID généré est enregistré dans l'instance de l'objet en cours d'enregistrement (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


2

Essaye ça:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.