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.

naspinski
quelle

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;
Keimsturm
quelle
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

Jason Stevenson
quelle
2

Versuche dies:

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