c# - 用于查找具有非主键值的实体的存储库方法

标签 c# entity-framework repository repository-pattern dbcontext

所以我不确定标题中的术语是否正确,但我应该能够描述我正在尝试做的事情。

我有一个“GenericRepository”类,我所有实际的 Repository 类都继承自该类,它包含几个通用方法。该类的代码如下

public class GenericRepository<TEntity> where TEntity : class
{
    internal ReportsDirectoryEntities context;
    internal DbSet<TEntity> dbSet;

    public GenericRepository(ReportsDirectoryEntities context)
    {
        this.context = context;
        this.dbSet = context.Set<TEntity>();
    }

    /////////////////////////////////////////////////////////////////////

    public virtual IEnumerable<TEntity> GetAll()
    {
        return dbSet.ToList();
    }
    public virtual TEntity GetByID(int id)
    {
        return dbSet.Find(id);
    }
    public virtual void Insert(TEntity entity)
    {
        dbSet.Add(entity);
    }
    public virtual void Delete(object id)
    {
        TEntity entityToDelete = dbSet.Find(id);
        Delete(entityToDelete);
    }
    public virtual void Delete(TEntity entityToDelete)
    {
        if (context.Entry(entityToDelete).State == System.Data.EntityState.Detached)
        {
            dbSet.Attach(entityToDelete);
        }
        dbSet.Remove(entityToDelete);
    }
    public virtual void Update(TEntity entityToUpdate)
    {
        dbSet.Attach(entityToUpdate);
        context.Entry(entityToUpdate).State = System.Data.EntityState.Modified;
    }
}

现在一切都很好,我现在要做的是添加一个 GetByName 方法,我可以在其中传入实体的“名称”属性并返回它。

我试过了

    public virtual TEntity GetByName(string name)
    {
        return (from e in context.Set<TEntity>()
                where e.Name == name
                select e).SingleOrDefault();
    } 

但这强调了 Name 说“TEntity 不包含名称的定义”等等,这是有道理的。

我可以在单独的存储库中轻松地做到这一点,但想知道是否有一种方法可以在通用存储库中做到这一点。

非常感谢任何帮助!

最佳答案

如果您所有的实体类型都有 Name 属性,那么您可以使用 Name 属性扩展 TEntity 接口(interface)。

否则,您可以使用SqlQuery() DbSet 的方法,以字符串查询作为参数。

关于c# - 用于查找具有非主键值的实体的存储库方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13826814/

相关文章:

java - 如何在 Java 中创建类存储库以及我真的需要它吗?

c# - 从 asp.net core 高效地发送文件

c# - Linq 分组 - <k,v> 我的 'V' 去哪儿了?

c# - 使用正则表达式的简单 C# 分词器

entity-framework - 如何通过 EF Model First 数据库架构升级避免数据丢失?

c# - ODAC/Oracle 等同于 Linq to Entities GroupBy FirstOrDefault

git - 来自 git 状态的 "fatal: Not a git repository (or any of the parent directories)"

c# - Json.NET 反序列化或序列化 json 字符串并将属性映射到运行时定义的不同属性名称

c# - Entity Framework - 使用具有不同连接字符串的相同 DbContext

git - 从 Git 存储库导出单个文件的每个修订版?