Подтвердить что ты не робот

Получить идентификатор записи в 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, поэтому я не создаю объекты для вставки данных.

4b9b3361

Ответ 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