Czy mogę zwrócić pole „id” po wstawieniu LINQ?

182

Kiedy wprowadzam obiekt do bazy danych za pomocą Linq-to-SQL, czy mogę uzyskać identyfikator, który właśnie wstawiłem bez wykonywania kolejnego wywołania db? Zakładam, że jest to dość łatwe, po prostu nie wiem jak.

naspinski
źródło

Odpowiedzi:

266

Po zatwierdzeniu obiektu w bazie danych obiekt otrzymuje wartość w polu ID.

Więc:

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;
Germstorm
źródło
2
Być może będziesz musiał ustawić pole na „wygenerowane w bazie danych” i „aktualizuj przy wstawianiu”, aby to zadziałało.
Sam
1
jak to zrobić w C # 4.0? nie ma żadnych wstawień ani zmian?
Bat_Programmer
1
@ Confused Programmer - jest taki sam, ale z Context.Collection.Add () i SaveChanges ()
naspinski
Zachowanie może być specyficzne dla DB. Podczas korzystania z SQLite nie spowodowało to zapełnienia identyfikatora.
denver
Używałem tego już wcześniej, ale jak sprawić, by działało to na stołach wielorelacyjnych? Czy muszę zapisać tabele główne, najpierw uzyskać identyfikator z obu, a następnie zapisać oba identyfikatory w tabeli relacji?
CyberNinja,
15

Podczas wstawiania wygenerowany identyfikator jest zapisywany w instancji zapisywanego obiektu (patrz poniżej):

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

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

Jason Stevenson
źródło
2

Spróbuj tego:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Khalid Salameh
źródło