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?