在 LINQPad 實作 Repository Pattern

  • 162
  • 0
  • 2024-07-11

在 LINQPad 使用 LINQ to SQL 連接資料庫,的情境下 
如果要實作 Repository Pattern 

以下是簡單範例 

另外,如果是選擇 EF 連線 ,把 GetTable<T> 改成 Set<T> 即可

void Main()
{
  IRepository<Parameter> _parameterRepository = new Repository<Parameter>(this);
  _parameterRepository.All().Dump();
}


interface IRepository<T> : IDisposable where T : class
{
  IEnumerable<T> All();
  IQueryable<T> GetAll(Expression<Func<T, bool>> predicate);
  T Get(Expression<Func<T, bool>> predicate);
}
class Repository<T> : IRepository<T> where T : class
{
  UserQuery userQuery;


  public Repository(UserQuery userQuery)
  {
    this.userQuery = userQuery;
  }

  public IEnumerable<T> All()
  {
    return userQuery.GetTable<T>();
  }

  public void Dispose()
  {
    userQuery.Dispose();
  }

  public T Get(Expression<Func<T, bool>> predicate)
  {
    return userQuery.GetTable<T>().FirstOrDefault(predicate);
  }

  public IQueryable<T> GetAll(Expression<Func<T, bool>> predicate)
  {
    return userQuery.GetTable<T>().Where(predicate);
  }
}