Чи можу я повернути поле 'id' після вставки LINQ?


182

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

Відповіді:


266

Після введення об'єкта в db об'єкт отримує значення в полі свого ідентифікатора.

Так:

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 ?? немає вставокПодати або змінити ??
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


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.