Получить идентификатор записи в Entity Framework после вставки
Я разрабатываю приложение ASP.net, используя Entity Framework. Я использую DetailsView
для вставки данных в базу данных. Существует таблица как Client
, а ее первичный ключ - client_id
. client_id
автоматически генерируется базой данных. Мне нужно создать автоматическую сгенерированную client_id
после вставки записи в таблицу Client
и назначить ее скрытому полю для дальнейшего использования.
Я искал об этом, и я нашел много решений. Но я не знаю, как их использовать, так как я новичок в asp.net. Я обнаружил, что Entity Framework автоматически заполняет бизнес-объекты с помощью значений, генерируемых db, после вызова SaveChanges()
. Мой вопрос: где я должен это назвать в своем частичном классе? Что такое событие?
Я использую DetailsView с EntityDataSource и привязываю EntityDataSource напрямую с Entity Model, поэтому я не создаю объекты для вставки данных.
Ответы
Ответ 1
Это то, что я ищу.
в частичном классе
protected void clientDataSource_OnInserted(object sender, EntityDataSourceChangedEventArgs e )
{
int newPrimaryKey = ((Client)e.Entity).ClientId;
Debug.WriteLine(" Client ID is " + newPrimaryKey);
}
и добавить строку ниже в EntityDataSource
на странице aspx.
OnInserted="clientDataSource_OnInserted"
Ответ 2
После вызова _dbContext.SaveChanges()
объект автоматически будет обновлен с новым значением поля идентификации.
В следующем коде предполагается, что имя контейнера сущности Entity Framework - это MyEntities, а таблица клиента базы данных имеет как минимум два следующих поля:
client_id int identity
client_name varchar(25)
Ваш код может выглядеть примерно так:
// Establish DbContext
private readonly MyEntities _dbContext = new MyEntities();
// Create new client table entity and initialize its properties
var clientEntity = new Client { client_name="MyCo" };
// Add it to the ORM collection of Client entities
_dbContext.Clients.Add(clientEntity);
// Save the new entity to the database
_dbContext.SaveChanges();
// Return the identity field from the existing entity,
// which was updated when the record was saved to the database
return clientEntity.client_id;
Ответ 3
После того, как вы вставили объект, он должен быть обновлен, чтобы свойство, которое сопоставляется с первичным ключом в базе данных, имеет новое значение PK.
Как и MyObject.Id
, вы получите новый идентификатор
Ответ 4
Спасибо, я потратил 3 дня на поиск и поиск со сложными результатами, но это решение блестяще! Здесь он находится в vb.net:
Protected Sub dvArticulos_ItemInserted(sender As Object, e As EntityDataSourceChangedEventArgs) Handles EntityDataSource1.Inserted
Dim last_Serie As Long = DirectCast(e.Entity, articulos).Serie
Session("Articulo") = last_Serie
End Sub