получение значения строки идентификатора с помощью ADO.NET Объект

#entity-framework-4 #ado.net-entity-data-model

#entity-framework-4 #ado.net-entity-data-model

Вопрос:

У меня есть следующая таблица в базе данных SQL Server 2008:

 User
--------------------------------------------------------
Id           Numeric(18, 0) | Identity(1, 1) PK not null
Name         Nchar(20)      | Not null
  

Я использую ADO.NET Модель данных объекта для выполнения:

 MyEntities entities;
try
{
    entities = new MyEntities();
    if (entities.User.Count(u => u.Name == userName) == 0)
    {
        entities.User.AddObject(new User()
        {
            Name = userName
        });
        resultCode = 1;
        entities.SaveChanges();
    }
    else
    {
        resultCode = 2;
    }
}
catch
{
    resultCode = 3;
}
finally
{
    if (entities != null)
        entities.Dispose();
}
  

Как я могу получить User.Добавлен идентификатор для нового пользователя?

Ответ №1:

Если ваша модель настроена правильно и у вас есть свойство Id, отмеченное StoreGeneratedPattern.Identity , вам нужно просто вызвать это:

     var user = new User()
    {
        Name = userName
    };
    entities.User.AddObject(user);
    resultCode = 1;
    entities.SaveChanges();
    int id = user.Id; // it's here
  

Ответ №2:

Попробуйте сохранить ссылку на пользовательский объект. После вызова SaveChanges() идентификатор должен быть автоматически обновлен. Вот модификация вашего кода для демонстрации:

 if (entities.User.Count(u => u.Name == userName) == 0)
{
    User newUser = new User()
    {
        Name = userName
    };
    entities.User.AddObject(newUser);
    resultCode = 1;
    entities.SaveChanges();

    // newUser.Id should be populated at this point.
}