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.

naspinski
la source

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;
Tempête de germes
la source
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

Jason Stevenson
la source
2

Essaye ça:

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