Получить идентификатор записи в 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