Como recupero os IDs gerados pelo banco de dados ao usar o padrão de repositório?

Na minha solução, tenho um projeto Domínio e um projeto DataAccess. O projeto My Domain contém objetos e interfaces de domínio para vários repositórios e uma interface para um UnitOfWork que conterá todos os meus repositórios. Meu projeto DataAccess contém as implementações de todas essas interfaces e as versões EF dos meus objetos Domínio.

Então, se eu tiver uma classe chamadaPerson e eu quero adicionar umPerson para o banco de dados ficaria assim:

unitOfWork.People.Add(person);
unitOfWork.Complete();

DentrounitOfWork.People.Add(person) Eu mapeio meu domínioPerson objetar ao meu EFPerson objeto com o AutoMapper. Então eu adiciono meu EFPerson objetar ao EFDbContext objeto.

public void Add(Person person) {
  DataAccess.Entities.Person dbPerson = Mapper.Map<DataAccess.Entities.Person>(person);
  dbContext.People.Add(dbPerson);
}

A função Complete () envolve apenas SaveChanges ().

public int Complete() {
  dbContext.SaveChanges();
}

Normalmente, o EF atualiza o ID gerado pelo banco de dados de um objeto inserido após a inserção. Mas, neste caso, a EF não sabe nada sobre o meu objeto Pessoa de Domínio.

Como meu objeto Pessoa do Domínio não tem seu ID, não posso atualizar a entrada do banco de dados ou buscá-la novamente no banco de dados.

A única alternativa em que consigo pensar é gerar um guia no servidor e usá-lo como um ID. Mas isso cria redundância na forma de dois IDs. Também não é muito amigável, pois os usuários farão referência a esse ID nos campos de pesquisa. Lembrar o ID 135 é muito mais simples do que lembrar um guia.

Existe alguma maneira de fazer com que o dbContext atualize o ID do objeto de domínio diretamente ou, alternativamente, faça com que o ID entre nas camadas?

questionAnswers(2)

yourAnswerToTheQuestion