我正在尝试为我的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();
}
}
有没有办法做到这一点,而不必使用反射和创建减速,这将使它几乎毫无价值?
答案 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>();
}