Получить идентификатор записи в Entity Framework после вставки
Я разрабатываю ASP.net приложение, использующее Entity Framework. Я использую DetailsView
для вставки данных в базу данных. Есть таблица as Client
и его первичный ключ client_id
. client_id
автоматически генерируется базой данных. Мне нужно получить auto generated client_id
после вставки записи в Client
таблица и назначьте ее скрытому полю для дальнейшего использования.
Я искал об этом и я нашел много решений. Но я не знаю, как их использовать, так как я новичок в asp.net - ... Я нашел это. Entity Framework автоматически заполняет бизнес-объекты значениями, созданными в БД, после вызова SaveChanges()
. Мой вопрос в том, где я должен называть это в моем частичном классе ? Что это за событие ?
Я использую DetailsView с EntityDataSource и привязкой EntityDataSource непосредственно с моделью сущности, поэтому я не создаю объекты для вставки данных.
4 ответов
после вызова _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's 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;
после вставки сущности она должна быть обновлена, чтобы свойство, которое сопоставляется с первичным ключом в базе данных, имело новое значение PK.
Как MyObject.Id
даст вам новый Id
Это то, что я ищу.
на частичная класс
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"
Спасибо, я потратил 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