我正在使用ASP.NET MVC5,实体框架6,依赖注入和工作单元。
在数据库中保存新项目时遇到问题。我无法获取刚刚插入的项目的新生成的ID。
下面是我的代码示例,只是为了进一步了解我的问题:
这是我的服务
public class UserService : IUserService
{
IUnitOfWork _unitOfWork;
IUserRepository _userRepository;
public UserService(IUnitOfWork unitOfWork, IUserRepository UserRepository)
{
_unitOfWork = unitOfWork;
_userRepository = UserRepository;
}
public int Create(UserDTO entity)
{
if(entity == null)
{
throw new ArgumentNullException("entity");
}
entity = _userRepository.Add(entity);
_unitOfWork.Commit();
return entity.UserID;
}
}
这是我的资料库
public virtual TEntityDTO Add(TEntityDTO entity)
{
var item = Mapper.Map<TEntityDTO, TEntity>(entity);
var createItem = Mapper.Map<TEntity, TEntityDTO>(context.Set<TEntity>().Add(item));
return createItem;
}
这是我的工作单位
public int Commit()
{
// Save changes with the default options
return _dbContext.SaveChanges();
}
答案 0 :(得分:1)
我不知道实体框架,但问题对我来说很明显。
第entity=_userRepository.Add(entity);
行调用存储库的Add
方法。在存储库的Add
方法中,您要添加一个实体,然后将其映射回到DTO。然后,您将返回映射的DTO。请注意,此处已将DTO与您的实体分离。它不再能够反映实体中的更改。
然后在您的服务中,致电_unitOfWork.Commit();
。这会将更改刷新到数据库,实际上在这里生成了新的ID。新的ID会反映在您的实体中。但是,当您正在处理不再与Entity连接的DTO时,就看不到该新生成的ID。
那该怎么办?我不知道,这取决于您的总体架构。