使用没有实体框架的存储库

时间:2014-05-31 20:43:02

标签: c# repository

我试图弄清楚如何实现没有实体框架的存储库模式。我需要使用ADO.NET(已断开连接)实现(withot DbContext)。我知道是否有可能。

我有一个像Repository这样的接口:

public interface IRepository<T>
{
    void Add(T newEntity);
    void Remove(T Entity);
    void Update(T Entity);
    IQueryable<T> GetAll();
    T Get(object key);
    void SaveChanges();                
}

所以,我只需要知道如何在ADO.NET连接和Mapper或其他东西中使用它。

1 个答案:

答案 0 :(得分:0)

您的问题是关于存储库模式,但是您的示例看起来更像是编写自定义linq提供程序。

这实际上是相当复杂的事情,我认为你真正需要的是真正使用存储库模式,你可以使用GetCar(int Id)之类的方法,然后使用你想要的任何框架专门实现。

不同之处在于,对于像EF这样的linq提供程序,您可以让调用者能够编写任何他们想要的查询。但是,从技术上讲,这会打破存储库模式。使用Repo模式的想法是在单个类中包含所有查询,然后公开仅执行应用程序所需的方法。这样,您就无法在代码中获得查询,并且只能实现应用程序所需的操作。

换句话说,EF实际上并不是存储库模式的一个示例,它是与数据库通信并创建表示数据库中实体的类的一种方式。通常,您在您的存储库中使用EF或类似的 ,并可能公开实际的实体类型以供外部使用。

现在,编写自定义linq提供程序仍然很有趣,如果你想这样做,请看看这个系列: http://www.jacopretorius.net/2010/01/implementing-a-custom-linq-provider.html