2011-06-22 2 views
0

J'utilise le modèle POCO pour Entity Framework 4.Interface Expose aux listes Entity Framework POCO avec référencement sur Entity Framework

J'ai fait un autre fichier pour mettre en œuvre la classe partielle pour l'objet de contexte. Dans ce fichier, j'ai ajouté une référence à une interface que j'ai faite.

L'interface a juste cette propriété en elle:

IQueryable<Client> Clients { get; set; } 

Le fichier généré réel a cela il:

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

Maintenant, ObjectSet implements IQueryable<>. Mais quand je fais cela, je reçois l'erreur suivante:

'ClientContracts.ArupEntities' does not implement interface member 'RepositoryInterfaces.IClientRepository.Clients'. 'ClientContracts.ArupEntities.Clients' cannot implement 'RepositoryInterfaces.IClientRepository.Clients' because it does not have the matching return type of 'System.Linq.IQueryable'

Je pensais que je pouvais faire cela et que ça marche. Clairement, je ne peux pas ...

Existe-t-il un moyen d'exposer les listes d'entités POCO en tant qu'interface non liée à Entity Framework?

Répondre

1

Non, ce n'est pas comme ça que ça fonctionne. Lorsque vous implémentez l'interface, vous devez renvoyer exactement le type défini dans la définition de l'interface. En outre, il existe une certaine différence dans les types génériques que vous utilisez dans votre exemple: Patient/Client.

Vous pouvez redéfinir l'interface comme:

IQueryable<Client> ClientsQuery(); 

Et dans l'utilisation de classe de contexte partiel:

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

Merci pour la réponse. (En passant, l'écart était dû à mon erreur en mettant dans l'exemple.) – Vaccano