Получить значение столбца первичного ключа после вставки записи, используя DetailsView и EntityDataSource - PullRequest
2 голосов
/ 22 декабря 2011

Я использую DetailsView с EntityDataSource и связываю EntityDataSource напрямую с Entity Model. Я хочу получить значение первичного ключа после того, как запись была вставлена. Как я могу получить это либо в

protected void detailsVewUser_ItemInserted(object sender, DetailsViewInsertedEventArgs e)

или

protected void EntityDataSource_Inserted(object sender, DetailsViewInsertedEventArgs e)

Ответы [ 3 ]

2 голосов
/ 21 июня 2012

DetailsViewInsertedEventArgs имеет свойство Values, но когда вы вставляете из DetailsView, вы обычно не предоставляете первичный ключ через текстовое поле, так что вновь назначенный первичный ключ там не будет.

Вы можетеиспользуйте вместо этого событие EntityDataSource.Inserted.Он передает EntityDataSourceChangedEventArgs, который имеет свойство Entity, которое можно привести к типу, а затем получить значение атрибута первичного ключа.Например, если бы у меня была сущность с именем Dependent, которую я только что вставил в свой ObjectContext через EntityDataSource, мой обработчик событий для EntityDataSource мог бы выглядеть так:

protected override dependentInformationDataSource_OnInserted(object sender, EntityDataSourceChangedEventArgs e )
{
    // let's say my Dependent entity's primary key is called DependentKey
    int newPrimaryKey = ((Dependent)e.Entity).DependentKey;

    // do something with newPrimaryKey
}
0 голосов
/ 22 декабря 2011

Точный синтаксис зависит от базы данных, но обычный способ заключается в том, чтобы сделать somnething как в сервере sql

Вставить MyTable () ...) Значения (...) Выберите Scope_Identity

Так что просто выполните вышеупомянутое через читателя или sp (вы можете вернуть его как скаляр).

Как и где вы передаете его обратно, зависит от вас, но если вы передаете экземпляр viewmodel с другими данными, заполнение его свойства id будет хорошим и чистым.

Если у вас есть триггеры, ограничения по умолчанию и т. Д., Перезагрузка экземпляра с использованием переданного идентификатора лучше.

0 голосов
/ 22 декабря 2011

Вы можете получить новый идентификатор непосредственно из базы данных (я предполагаю, что SQL, но какую бы базу данных вы не использовали) теперь, когда он был вставлен:

// an int to store your newly inserted ID
int newID = 0; 
// a string containing a query that gets your latest, inserted record.  
// Modify to your specific needs =)
string newIDQuery = "SELECT TOP 1 ID FROM tableName ORDER BY ID DESC;";
SqlCommand getNewIdCommand = New SqlCommand(newIDQuery, New SqlConnection("You Connection String"));
getNewIdCommand.Connection.Open(); // open the SQL connection
newID = getNewIdCommand.ExecuteScalar(); // this loads the int variable with the newest ID
getNewIdCommand.Connection.Close(); // close the SQL connection

Примечание. В этом примере предполагается, что столбец первичного ключа представляет собой целочисленное поле в стиле автоинкремента с именем ID. Измените приведенный выше код в соответствии с вашими потребностями или дайте мне знать, если у вас есть вопросы!

...