Я пытаюсь получить последний вставленный идентификатор из базы данных через Entity Framework, однако моя проблема почему-то уникальна, и я не могу найти никакого решения, кроме как переписать всю свою инфраструктуру и бизнес-уровень, поэтому все мои идентификаторы являются путеводителями, который я могу создать вручную или получить последнюю запись с другим вызовом базы данных после коммита.
Вот проблема.У меня трехуровневая архитектура, в которой я использую UoW, репозиторий, сервисы и фасады.Я покажу свой код сверху вниз, чтобы вы могли понять.
Вот мой фасад, где uow.Commit
звонит SaveChanges()
public async Task<int> RegisterUserAsync(UserCreateDto user)
{
using (var uow = UnitOfWorkProvider.Create())
{
var id = _userService.Create(user);
await uow.Commit();
return id;
}
}
Как видите, яотправляя только мой DTO в службу, где я обрабатываю, как это, также я отображаю внутри службы
public virtual int Create(TCreateDto entityDto)
{
var entity = Mapper.Map<TEntity>(entityDto);
Repository.Create(entity);
return entity.Id;
}
и, наконец, мой репозиторий выглядит так
public TKey Create(TEntity entity)
{
Context.Set<TEntity>().Add(entity);
return entity.Id;
}
Есть ли некоторые элегантныерешение этого?Как я уже говорил, моя единственная идея - переключить все идентификаторы на Guid или второй вызов Id после фиксации, что я считаю не очень хорошим решением, потому что, когда я хочу соединить две или более таблиц в одной транзакции, это будет невозможно.