Разоблачить интерфейс для списков POCO Entity Framework без ссылок на Entity Framework - PullRequest
0 голосов
/ 22 июня 2011

Я использую шаблон POCO для Entity Framework 4.

Я создал другой файл для реализации частичного класса для объекта контекста. В этом файле я добавил ссылку на созданный мной интерфейс.

В интерфейсе есть только одно свойство:

IQueryable<Client> Clients { get; set; }

Фактически сгенерированный файл содержит это:

public ObjectSet<Patient> Clients
{
    get { return _clients  ?? (_clients = CreateObjectSet<Client>("Clients")); }
}
private ObjectSet<Client> _clients;

Теперь ObjectSet реализует IQueryable <> . Но когда я делаю это, я получаю следующую ошибку:

«ClientContracts.ArupEntities» не реализует элемент интерфейса «RepositoryInterfaces.IClientRepository.Clients». «ClientContracts.ArupEntities.Clients» не может реализовать «RepositoryInterfaces.IClientRepository.Clients», поскольку у него нет соответствующего возвращаемого типа «System.Linq.IQueryable»

Я думал, что смогу сделать это и заставить это работать. Ясно, что я не могу ...

Есть ли способ, которым я могу представить списки объектов POCO как интерфейс, который не связан с Entity Framework?

1 Ответ

1 голос
/ 22 июня 2011

Нет, это не так, как это работает. При реализации интерфейса вы должны возвращать именно тот тип, который определен в определении интерфейса. Также есть некоторые расхождения в универсальных типах, которые вы используете в своем примере - Patient / Client.

Вы можете переопределить интерфейс как:

 IQueryable<Client> ClientsQuery();

И в частичном контексте использования класса:

 public IQueryable<Client> ClientsQuery()
 {
     return Clients;
 }
...