在 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);
}
}