我正在构建一个应用程序(一个特定的web api),我想实现存储库模式来抽象数据访问层并为将来的更改做好准备。
我的目标是使存储库接口足够抽象,以便能够在它们之上实现每种技术,从Native SQL Client(运行sql命令)开始,再到像EF或dapper这样的orm。
我已经阅读了一些关于存储库的文章,我的通用存储库的界面看起来像这样:
interface IRepository<T>
{
IEnumerable<T> FindAll();
IEnumerable<T> FindBy(Expression<Func<T, bool>> predicate);
T FindById(int id);
void Add(T entity);
void Remove(T entity);
}
我希望FindBy方法接受一个linq表达式,因为另一个选项是让它接受本机sql,并且对于像linq这样的技术来说,它不能很好地工作。
问题是我还希望能够在此接口之上实现本机sql存储库,并且为了实现本机sql存储库,我需要运行sql命令,字符串。 在这个接口中,我不接受任何sql命令作为字符串,我接受linq表达式,并且本机sql客户端不能处理linq表达式(据我所知)。
所以我的问题是,如何让这个界面与任何技术/ orm /库/客户端/适配器兼容,你明白了......
谢谢, 阿里克