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.

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;

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


2

Tente o seguinte:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.