2012-04-16 6 views
2

J'essaie de faire ceci: J'utilise d'abord le code EF pour mapper une ancienne base de données existante. Il y a beaucoup de champs avec le mauvais type (ex: char (1) utilisé comme booléen) donc j'ai créé une classe wrapper pour mon contexte db qui correspond parfaitement à la table de base de données. Maintenant, je veux exposer un type IQueryable de mon Entité sur mon dépôt. Voir mon exemple:Convertir IQueryable <T> en IQueryable <Y>

public class MyContext:DbContext 
{ 
    public DbSet<WrappedEntity> WrapperEntities; 
} 

public class Repository 
{ 
    private MyContext _context; 

    //contructors omitted 

    public IQueryable<Entity> GetEntities() 
    { 
     return _context.WrapperEntities; //doesn't compile, I need some convertion here 
    } 
} 

J'ai déjà ma routine de convertion, la seule chose qui manque est un moyen d'interroger ma pensée DbContext mon dépôt sans exposer la classe WrappedEntity, Est-il possible et comment?

Merci.

+3

Je suis confus, vous avez créé le type de WrappedEntity pour corriger une décision regrettable schéma dans la base de données, mais vous n » Je veux exposer ça? Est-ce que je vous lis correctement? –

+0

Exactement. Je veux "cacher" au consommateur de mon référentiel la structure réelle de ma base de données. –

Répondre

1

Habituellement, vous projet avec Queryable.Select pour changer le type de votre requête ...

public IQueryable<Entity> GetEntities() 
{ 
    return _context.WrapperEntities.Select(x => new Entity(){...}); 
} 
+0

Le plus proche de ce dont j'avais besoin, mais j'ai réalisé que ce que je voulais n'était pas la meilleure façon de résoudre mon problème. Merci de votre aide. –

Questions connexes