Posso restituire il campo 'id' dopo un inserimento LINQ?


182

Quando inserisco un oggetto nel DB con Linq-to-SQL posso ottenere l'ID che ho appena inserito senza effettuare un'altra chiamata db? Suppongo che sia abbastanza facile, non so proprio come.

Risposte:


266

Dopo aver eseguito il commit dell'oggetto nel db, l'oggetto riceve un valore nel suo campo ID.

Così:

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
Forse dovrai impostare il tuo campo su "database generated" e "update on insert" affinché funzioni.
— Sam,

1
come faccio in c # 4.0 ?? non ci sono inserimenti o invii di invii ??
— Bat_Programmer

1
@Confused Programmer - è lo stesso, ma con Context.Collection.Add () e SaveChanges ()
— naspinski

Il comportamento può essere specifico del DB. Quando si utilizza SQLite ciò non ha comportato il popolamento dell'ID.
— denver il

L'ho già usato prima, ma come farlo funzionare su una tabella multirelazione? Devo salvare prima le tabelle principali per ottenere l'ID da entrambi e quindi salvare entrambi gli ID nella tabella delle relazioni?
— CyberNinja,

15

Quando si inserisce l'ID generato viene salvato nell'istanza dell'oggetto da salvare (vedere di seguito):

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

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


2

Prova questo:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.