由于平台限制,我试图使用ado.net实现存储库模式。使用旧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;
}
}
同意。有大量的ORM可用。 –
我为传统应用程序添加了功能,并且不想携带任何新的DLL。 – ca9163d9
好的,那么你有一个人的工作要做,以实现FindBy方法。您需要从表达式创建SQL字符串。这不是微不足道的*。我建议你改变你的界面的设计,以不支持任意表达式。也许你可以支持where-select-orderby-top序列。也许这就够了。 – usr