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.

naspinski
sumber

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;
Badai topan
sumber
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

Jason Stevenson
sumber
2

Coba ini:

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