Как я могу получить ObjectSet <T>с EF Code First CTP5 (для общего хранилища?) - PullRequest
1 голос
/ 13 января 2011

Для Code First CTP 3 и 4 у меня был общий шаблон репозитория, реализованный путем реализации метода в моем DbContext, который имел return this.ObjectContext.CreateObjectSet<T>. Это позволило мне создать набор объектов для любого нужного мне типа, который я затем смогу использовать для кодирования Linq.

Прошлой ночью я обновился до CTP5, и похоже, что они сильно изменили способ реализации DbContext. Один аспект заключается в том, что в классе DbContext больше нет свойства ObjectContext. Насколько я могу судить, нет способа создать ObjectSet<T> или любой другой набор данных, который я могу использовать для общего доступа по требованию, который будет привязан к контексту данных.

Затем у меня возникла идея создать DbSet<T> в методе вместо этого, поскольку это могло бы позволить мне выполнять над ним операции linq-to-entity. Это также не работает, так как для DbSet<T> нет конструкторов (или так, как мне говорит компилятор), и у меня нет способа привязать его к существующему экземпляру моего контекста данных.

Кто-нибудь знает, как реализовать универсальный репозиторий с Code First CTP5?

1 Ответ

3 голосов
/ 13 января 2011

Мои репозитории возвращают IQueryable<T>. И ObjectSet<T>, и DbSet<T> реализуют этот интерфейс. Чтобы получить DbSet<T> с code-first, либо извлеките свойство из созданного вами класса контекста, либо у базового класса, который использует ваши классы контекста, есть метод с именем Set<T>(), который будет возвращать DbSet<T>.

НТН

...