Я пытаюсь реализовать шаблон репозитория с помощью ado.net из-за ограничений платформы.
public interface IGenericRepository<T> : IDisposable where T : class
{
IQueryable<T> GetAll();
IQueryable<T> FindBy(Expression<Func<T, bool>> predicate);
void Add(T entity);
void Delete(T entity);
void Edit(T entity);
void Save();
}
Как завершить следующий абстрактный класс...?
public abstract class GenericRepository<C, T> :
IGenericRepository<T>
where T : class
where C : IDbDataAdapter, new()
{
private C dbDataAdapter = new C();
protected C DB
{
get { return dbDataAdapter; }
set { dbDataAdapter = value; }
}
public virtual IQueryable<T> GetAll()
{
DataTable dt;
dbDataAdapter.fill(dt);
IQueryable<T> query = dt....?;
return query;
}
public IQueryable<T> FindBy(System.Linq.Expressions.Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = dbDataAdapter.???Set<T>???().Where(predicate);
return query;
}
Обновление:
Репозиторий, указанный в домене, я реализую позже с помощью этих двух интерфейсов/классов.
public class FooRepository :
GenericRepository<FooBarEntities, Foo>, IFooRepository {
public Foo GetSingle(int fooId) {
var query = GetAll().FirstOrDefault(x => x.FooId == fooId);
return query;
}
}