Как получить первичный ключ последнего добавленного объекта в Entity Framework? - PullRequest
1 голос
/ 12 октября 2011

Не знаю, есть ли что-то подобное

`//context.Add(...) stuff...
var primaryKeyOfRecentObjectAddedToDB = context.SaveChanges();`

Мне просто нужен первичный ключ, который база данных дала моему недавно добавленному объекту.

Спасибо за помощь!

Ответы [ 3 ]

1 голос
/ 12 октября 2011

Если у вас есть несколько объектов типа MyEntity в контексте, которые должны быть вставлены в БД, вы можете использовать что-то вроде этого (в EF 4.1):

// save references to the entities which will be added in a local list
var listOfEntitiesToAdd = context.ChangeTracker.Entries()
    .Where(e => e.State == EntityState.Added)
    .Select(e => e.Entity)
    .OfType<MyEntity>()
    .ToList();

// insert the entities, state will change to Unchanged,
// PK property (Id) gets populated
context.SaveChanges();

if (listOfEntitiesToAdd.Count > 0)
{
    // get highest created Id
    int maxId = listOfEntitiesToAdd.Max(e => e.Id);
}
1 голос
/ 12 октября 2011

У вас есть доступ к нему на вашем объекте, как только он будет сохранен:

var foo = new Foo { Id = Guid.NewGuid(); }

context.Add(foo);
context.SaveChanges();
var id = foo.Id;

Еще лучше, используйте Guid (вместо столбца идентификаторов) для своего идентификатора, и у вас есть доступ к нему, прежде чем вы попадете в базу данных.

var foo = new Foo { Id = Guid.NewGuid(); }

var id = foo.Id; // have access to the id here

context.Add(foo);
context.SaveChanges();
0 голосов
/ 12 октября 2011

Предполагая, что ваш первичный ключ является свойством вашей сущности и присваивается БД, он будет заполнен после выполнения SaveChanges():

context.Add(someFoo);
context.SaveChanges();
long myId = someFoo.Id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...