存储库模式的抽象

时间:2015-08-09 05:10:34

标签: sql asp.net database linq linq-to-sql

我正在构建一个应用程序(一个特定的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 /库/客户端/适配器兼容,你明白了......

谢谢, 阿里克

0 个答案:

没有答案