我可以在LINQ插入后返回'id'字段吗?


182

当我使用Linq-to-SQL将对象输入数据库时​​,是否可以获取刚插入的ID,而无需进行其他数据库调用?我以为这很简单,我只是不知道怎么做。

Answers:


266

将对象提交到数据库后,该对象将在其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
也许您需要将字段设置为“数据库已生成”和“插入时更新”才能起作用。
山姆

1
我如何在C#4.0中做到这一点?没有insertonsubmit或submitchanges?
Bat_Programmer 2012年

1
@Confused Programmer-相同,但具有Context.Collection.Add()和SaveChanges()
naspinski 2013年

该行为可能是特定于DB的。使用SQLite时,这不会导致填充ID。
丹佛

我以前使用过此功能,但是如何在多重关系表上实现此功能呢?我必须先保存两个主表的ID,然后再将它们都保存到关系表中吗?
Cyber​​Ninja

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/databases/how-to-common-data-patterns-with-linq-to-sql/#4


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.