<分区>
我正在开发一个 Asp.Net MVC 应用程序,并尝试创建一个通用方法,通过使用传递给此方法的 entityId 来检查数据库中是否存在特定记录。如下所示:
public bool CheckIfUserExistsByUserId(int userId)
{
return _userRepository.DbSet().Any(u => u.Id == userId);
}
但此方法仅检查 _userRepository 并接受一个整数作为 entityId。
我的问题是我想把这个通用方法作为通用方法放在我的 BaseService 中,就像我在下面写的其他通用方法一样:
public class BaseService<TModel> : IBaseService<TModel> where TModel : class
{
private readonly IUnitOfWork _unitOfWork;
private readonly IBaseRepository<TModel> _baseRepository;
public BaseService(IUnitOfWork unitOfWork, IBaseRepository<TModel> baseRepository)
{
_unitOfWork = unitOfWork;
_baseRepository = baseRepository;
}
public BaseService(IUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
public void Add(TModel entity)
{
this._baseRepository.Add(entity);
}
public void Remove(TModel entity)
{
this._baseRepository.Remove(entity);
}
/// <summary>
/// Remove All Provided Items At Once .
/// </summary>
/// <param name="itemsToRemove"></param>
public void RemoveRange(IEnumerable<TModel> itemsToRemove)
{
_baseRepository.RemoveRange(itemsToRemove);
}
public TModel FindById<T>(T key)
{
return _baseRepository.FindById(key);
}
public void Commite()
{
this._unitOfWork.Commite();
}
}
但在这种情况下,我无法从 Entity Framework 中获取传递给我的方法的实体的主键字段。另外,我不想在我使用上述方法的任何地方都将实体的主键字段传递给我的方法。 EF中是否可以获取到实体的主键字段?
编辑:根据其他用户的要求,我在此处添加了我的 IBaseRepository 源代码:
public interface IBaseRepository<TModel> where TModel : class
{
/// <summary>
/// Add New Entity .
/// </summary>
/// <param name="entity"></param>
void Add(TModel entity);
/// <summary>
/// Remove Item From Database .
/// </summary>
/// <param name="entity"></param>
void Remove(TModel entity);
/// <summary>
/// Remove All Provided Items At Once .
/// </summary>
/// <param name="itemsToRemove"></param>
void RemoveRange(IEnumerable<TModel> itemsToRemove);
/// <summary>
/// Get The Underlying Type's DbSet .
/// </summary>
/// <returns></returns>
DbSet<TModel> DbSet();
/// <summary>
/// Find Item By Id .
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="key"></param>
/// <returns></returns>
TModel FindById<T>(T key);
}