ฉันจะคืนค่าฟิลด์ 'id' หลังจากแทรก LINQ ได้หรือไม่


182

เมื่อฉันป้อนวัตถุลงในฐานข้อมูลด้วย Linq-to-SQL ฉันจะได้รับรหัสที่ฉันเพิ่งแทรกโดยไม่ต้องทำการเรียก db อื่นได้หรือไม่ ฉันคิดว่ามันค่อนข้างง่ายฉันไม่รู้

คำตอบ:


266

หลังจากที่คุณคอมมิตออบเจกต์ของคุณลงใน db วัตถุจะได้รับค่าในฟิลด์ ID

ดังนั้น:

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
บางทีคุณอาจต้องตั้งค่าเขตข้อมูลของคุณเป็น "สร้างฐานข้อมูล" และ "อัปเดตเมื่อแทรก" เพื่อให้สามารถใช้งานได้
Sam

1
ฉันจะทำสิ่งนี้ใน c # 4.0 ได้อย่างไร? ไม่มี insertonsubmit หรือยอมแพ้?
Bat_Programmer

1
@Confused Programmer - เหมือนกัน แต่มี Context.Collection.Add () และ SaveChanges ()
naspinski

ลักษณะการทำงานอาจเฉพาะ DB เมื่อใช้ SQLite สิ่งนี้จะไม่ส่งผลให้ ID ถูกเติม
เดนเวอร์

ฉันเคยใช้สิ่งนี้มาก่อน แต่จะทำให้มันทำงานบนตาราง multirelationship ได้อย่างไร ฉันต้องบันทึกตารางหลักก่อนรับ ID จากทั้งคู่และจากนั้นบันทึก id ทั้งสองลงในตารางความสัมพันธ์หรือไม่
CyberNinja

15

เมื่อแทรก ID ที่สร้างขึ้นจะถูกบันทึกลงในอินสแตนซ์ของวัตถุที่ถูกบันทึก (ดูด้านล่าง):

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

การอ้างอิง: http://blog.jemm.net/articles/database/how-to-common-data-patterns-with-linq-to-sql/#4


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.