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.