Kann ich das Feld 'id' nach einer LINQ-Einfügung zurückgeben?


182

Wenn ich mit Linq-to-SQL ein Objekt in die Datenbank eingebe, kann ich dann die ID einfügen, die ich gerade eingefügt habe, ohne einen weiteren Datenbankaufruf zu tätigen? Ich gehe davon aus, dass dies ziemlich einfach ist, ich weiß nur nicht wie.

Antworten:


266

Nachdem Sie Ihr Objekt in die Datenbank übernommen haben, erhält das Objekt einen Wert in seinem ID-Feld.

So:

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
Möglicherweise müssen Sie Ihr Feld auf "Datenbank generiert" und "Beim Einfügen aktualisieren" setzen, damit dies funktioniert.
Sam

1
Wie mache ich das in C # 4.0? Es gibt keine Insertonsubmit oder Submitchanges?
Bat_Programmer

1
@Confused Programmer - es ist das gleiche, aber mit Context.Collection.Add () und SaveChanges ()
naspinski

Das Verhalten kann DB-spezifisch sein. Bei Verwendung von SQLite führte dies nicht dazu, dass die ID ausgefüllt wurde.
Denver

Ich habe das schon einmal verwendet, aber wie funktioniert das auf Tabellen mit mehreren Beziehungen? Muss ich die Haupttabellen speichern, um zuerst die ID von beiden zu erhalten und dann beide IDs in der Beziehungstabelle zu speichern?
CyberNinja

15

Beim Einfügen wird die generierte ID in der Instanz des zu speichernden Objekts gespeichert (siehe unten):

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

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


2

Versuche dies:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.