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

Posted

技术标签:

【中文标题】我可以在 LINQ 插入后返回“id”字段吗?【英文标题】:Can I return the 'id' field after a LINQ insert? 【发布时间】:2008-09-22 09:10:02 【问题描述】:

当我使用 Linq-to-SQL 将对象输入到数据库中时,我可以在不进行另一个数据库调用的情况下获取我刚刚插入的 id 吗?我假设这很容易,我只是不知道如何。

【问题讨论】:

【参考方案1】:

将对象提交到数据库后,对象会在其 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;

【讨论】:

也许您需要将您的字段设置为“数据库生成”和“插入时更新”才能正常工作。 我如何在 c# 4.0 中做到这一点?没有 insertonsubmit 或 submitchanges?? @Confused Programmer - 是一样的,但是有 Context.Collection.Add() 和 SaveChanges() 行为可能是特定于数据库的。使用 SQLite 时,这不会导致填充 ID。 我以前用过这个,但是如何使它在多关系表上工作?我是否必须先保存主表,然后从两者中获取 ID,然后将两个 id 保存到关系表中?【参考方案2】:

插入时生成的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

【讨论】:

【参考方案3】:

试试这个:

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

【讨论】:

以上是关于我可以在 LINQ 插入后返回“id”字段吗?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 插入数据后返回主键ID

sql server返回插入记录的ID(多条记录)

mybatis插入数据后返回对象id

基于注解的mybatis插入一条数据如何返回这条数据的对象或者他的id?

sql insert into 插入记录后返回记录的ID

mysql insert一条记录后 返回创建记录主键id的方法