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.