代码之家  ›  专栏  ›  技术社区  ›  Jim Mitchener

访问以泛型类命名的已知类的参数

  •  1
  • Jim Mitchener  · 技术社区  · 15 年前

    我正在尝试为我的linq2sql实体创建一个通用的基本存储库。我想实现一个这样的通用findall()方法。

    class BaseRepository<T> : IBaseRepository<T>
    {
        private readonly FooDataContext _ctx = new FooDataContext();
    
        public IQueryable<T> FindAll()
        {
            return _ctx.T;
        }
    
        public void Add(T entity)
        {
            _ctx.T.InsertOnSubmit(entity);
        }
    
        public void Save()
        {
            _ctx.SubmitChanges();
        }
    }
    

    有没有什么方法可以做到这一点,而不必使用反射和产生减速,这将使它实际上毫无价值?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Justin Rudd    15 年前

    DataContext 已经有你需要的了。

    public IQueryable<T> FindAll()
    {
        return _ctx.GetTable<T>();
    }
    
    public void Add(T entity)
    {
        _ctx.GetTable<T>().InsertOnSubmit(entity);
    }
    
        2
  •  0
  •   John Fisher    15 年前

    如果在第一次使用后使用内存中的存储系统缓存特定类型的反射属性,则可能根本没有“几乎没有价值”的情况。事实上,如果不测试它,您就不知道反射解决方案会是一个问题,是吗?(许多.NET使用反射,人们不会看到这些场景中的速度减慢。序列化就是其中之一。)

        3
  •  0
  •   Lee    15 年前

    这应该有效:

    public IQueryable<T> FindAll()
    {
        return _ctx.GetTable<T>();
    }