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

时间:2009-11-16 19:41:37

标签: c# linq-to-sql generics

我正在尝试为我的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 个答案:

答案 0 :(得分:2)

DataContext已经拥有了你需要的东西。

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

public void Add(T entity)
{
    _ctx.GetTable<T>().InsertOnSubmit(entity);
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这应该有效:

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