Generics 如果存在于泛型复述中

Generics 如果存在于泛型复述中,generics,.net-core,repository-pattern,Generics,.net Core,Repository Pattern,我使用通用存储库和unitofwork(.net core)并尝试构建IfExist函数, 1:接口 bool IsExistRecord<type>(type Id); bool-IsExistRecord(类型Id); 2-实施 public bool IsExistRecord<type>(type Id) { var query = DbSet.Find(Id); if (query != null)

我使用通用存储库和unitofwork(.net core)并尝试构建IfExist函数,

1:接口

 bool IsExistRecord<type>(type Id);
bool-IsExistRecord(类型Id);
2-实施

 public bool IsExistRecord<type>(type Id)
    {
        var query = DbSet.Find(Id);
        if (query != null)
        {
            return true;
        }

        return false;
    }
public bool IsExistRecord(类型Id)
{
var query=DbSet.Find(Id);
if(查询!=null)
{
返回true;
}
返回false;
}
3-使用它

_unitOfWork.GetRepository<EntityName>().IsExistRecord(id);
\u unitOfWork.GetRepository().IsExistRecord(id);
但在这种情况下,我尝试只检查表的主键,
将表中的任何列作为代码、名字进行检查怎么样?!
任何帮助

您的存储库只需要这样的扩展方法(或者您可以将其转换并直接添加到存储库中)

//
///获取一个值,该值通过查询指示记录是否存在
/// 
///存储库实例
///查询谓词
///如果对象存在,则为True
public static bool DoesExist(此IRepository存储库,表达式谓词),其中tenty:class
{
返回repository.Get(p=>p.Where(谓词)).FirstOrDefault()!=null;
}
那么就这样称呼它:

_unitOfWork.GetRepository<EntityName>().DoesExist(p => p.FirstName == "Robert");
\u unitOfWork.GetRepository().DoesExist(p=>p.FirstName==“Robert”);

?更好的是,完全摆脱
IfExist
逻辑,使用
WHERE
子句只更新所需的数据。“通用存储库”本质上是一种反模式。在使用ORMs之前,隐藏原始ADO.NET代码是有意义的。当存在直接将实体操作转换为SQL的ORM时,这是没有意义的。使用LINQ,ORM本身是抽象的,因此没有理由将其隐藏在“通用”存储库中。工作单元本质上是EF DbContext/NH会话实例所做的工作-您对其对象所做的任何修改都将保留在内存中,直到您通过单个原子
SaveChanges
调用一次保存所有对象。如果您不需要它们,只需放弃上下文即可。通用存储库反模式通过尝试立即保存单个更改来打破这一点,从而使UoW实现变得更加困难
_unitOfWork.GetRepository<EntityName>().DoesExist(p => p.FirstName == "Robert");