我正在尝试通过Entity Framework从数据库获取最后一个插入的Id,但我的问题是独一无二的,我找不到任何解决方案,只能重写整个基础架构和业务层,以便所有的Id都是Guids,我可以手动创建,或在提交后通过另一个数据库调用获取最后一条记录。
这是问题所在。我有一个三层架构,我使用UoW、Repository、Services和Facades。我将从上到下展示我的代码,这样你就可以理解。
这是我的Facade,其中uw.Commit调用
这是问题所在。我有一个三层架构,我使用UoW、Repository、Services和Facades。我将从上到下展示我的代码,这样你就可以理解。
这是我的Facade,其中uw.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;
}
有没有一种优雅的解决方案?就像我说的,我的唯一想法是将所有 Id 切换为 Guid 或在提交后进行第二次调用 Id,但我认为这不是很好的解决方案,因为当我想要在一个事务中连接两个或更多表时将无法实现。