对于Code First CTP 3和4,我通过在DbContext
中实现具有return this.ObjectContext.CreateObjectSet<T>
的方法来实现通用存储库模式。这允许我为我需要的任何类型创建一个对象集,然后我可以使用Linq来编码。
昨晚我升级到了CTP5,似乎他们已经改变了很多DbContext
的实施方式。一方面是ObjectContext
类中不再有DbContext
属性。据我所知,没有方法可以创建ObjectSet<T>
或任何其他数据集,我可以根据需要一般性地访问这些数据集,这些数据集将与数据上下文绑定。
然后我有了在方法中创建DbSet<T>
的想法,因为这可以让我对它执行linq-to-entities操作。这不起作用,因为没有DbSet<T>
的构造函数(或编译器告诉我),我无法将它绑定到我的数据上下文的现有实例。
有没有人知道如何使用Code First CTP5实现通用存储库?
答案 0 :(得分:3)
我的存储库返回IQueryable<T>
。 ObjectSet<T>
和DbSet<T>
都实现了该接口。要使用代码优先获取DbSet<T>
,请将属性从您创建的上下文类中拉出,或者上下文类使用的基类具有名为Set<T>()
的方法,该方法将返回{ {1}}。
HTH