Bisakah saya mengembalikan bidang 'id' setelah menyisipkan LINQ?


182

Ketika saya memasukkan objek ke DB dengan Linq-to-SQL, bisakah saya mendapatkan id yang baru saja saya masukkan tanpa membuat panggilan db? Saya berasumsi ini cukup mudah, saya hanya tidak tahu caranya.

Jawaban:


266

Setelah Anda memasukkan objek Anda ke db objek menerima nilai di bidang ID-nya.

Begitu:

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
Mungkin Anda harus mengatur bidang Anda ke "database yang dihasilkan" dan "pembaruan saat disisipkan" agar ini berfungsi.
Sam

1
bagaimana saya melakukan ini di c # 4.0 ?? tidak ada insertonsubmit atau submitchang ??
Bat_Programmer

1
@Confused Programmer - itu sama, tetapi dengan Context.Collection.Add () dan SaveChanges ()
naspinski

Perilaku mungkin spesifik DB. Saat menggunakan SQLite, ini tidak menghasilkan ID yang sedang diisi.
denver

Saya sudah pernah menggunakan ini sebelumnya, tetapi bagaimana cara membuat ini bekerja di tabel multi-hubungan? Apakah saya harus menyimpan tabel utama terlebih dahulu untuk mendapatkan ID dari keduanya dan kemudian menyimpan kedua id ke tabel hubungan?
CyberNinja

15

Saat memasukkan ID yang dihasilkan disimpan ke dalam instance objek yang disimpan (lihat di bawah):

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

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


2

Coba ini:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.