Могу ли я вернуть поле 'id' после вставки LINQ?

182

Когда я вводю объект в БД с помощью Linq-to-SQL, могу ли я получить только что вставленный идентификатор без повторного вызова БД? Я предполагаю, что это довольно легко, я просто не знаю как.

naspinski
источник

Ответы:

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;
Germstorm
источник
2
Возможно, вам нужно будет установить в поле «Сгенерированная база данных» и «Обновить при вставке», чтобы это работало.
Сэм
1
Как мне сделать это в C # 4.0? нет вставки или отправки или отправки ??
Bat_Programmer
1
@Confused Programmer - то же самое, но с Context.Collection.Add () и SaveChanges ()
naspinski
Поведение может быть специфичным для БД. При использовании SQLite это не привело к заполнению идентификатора.
Денвер
Я использовал это раньше, но как сделать так, чтобы это работало на многосвязных таблицах? Нужно ли сохранять основные таблицы, сначала получить идентификатор из обеих, а затем сохранить оба идентификатора в таблице отношений?
CyberNinja
15

При вставке сгенерированный идентификатор сохраняется в экземпляр сохраняемого объекта (см. Ниже):

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

Джейсон Стивенсон
источник
2

Попробуй это:

MyContext Context = new MyContext(); 
Context.YourEntity.Add(obj);
Context.SaveChanges();
int ID = obj._ID;
Халид Саламех
источник