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.