Generics 如果存在于泛型复述中
我使用通用存储库和unitofwork(.net core)并尝试构建IfExist函数,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)
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");