Posso retornar o campo 'id' após uma inserção do LINQ?

182

Quando insiro um objeto no banco de dados com o Linq-to-SQL, posso obter o ID que acabei de inserir sem fazer outra chamada de banco de dados? Estou assumindo que isso é bem fácil, simplesmente não sei como.

naspinski
fonte

Respostas:

266

Depois de confirmar seu objeto no banco de dados, o objeto recebe um valor em seu campo de ID.

Assim:

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;
Tempestade de germes
fonte
2
Talvez você precise definir seu campo como "banco de dados gerado" e "atualização ao inserir" para que isso funcione.
Sam
1
como faço isso em c # 4.0? não há insertonsubmit ou submitchanges ??
Bat_Programmer
1
@Confused programador - é o mesmo, mas com Context.Collection.Add () e SaveChanges ()
naspinski
O comportamento pode ser específico do banco de dados. Ao usar o SQLite, isso não resultou no preenchimento do ID.
Denver
Eu já usei isso antes, mas como fazer isso funcionar em uma tabela de múltiplas relações? Preciso salvar as tabelas principais primeiro obter o ID de ambos e depois salvar os dois IDs na tabela de relacionamento?
CyberNinja
15

Ao inserir o ID gerado, ele é salvo na instância do objeto que está sendo salvo (veja abaixo):

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

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

Jason Stevenson
fonte
2

Tente o seguinte:

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