2010-10-21 4 views
1

J'ai une vue de base qui renvoie les mêmes colonnes que d'une table (plus ou moins 1 champ)Entity Framework, cartographie Vues aux tableaux

dans mon code DAL, je retourne une liste de MyTableObject, mais dans certains cas, je vais appeler l'avis pour retourner les mêmes données, mais de différentes sources.

List<MyTableObject> tableObjects = new List<MyTableObject>(); 
if (case1) 
    tableObjects = entities.MyTableObjects.Where(criteria).ToList(); 
else 
    tableObjects = entities.MyViewObjects.Where(criteria).ToList(); // <-- This will obviously break 
return tableObjects; 

Y at-il un moyen de renvoyer des entités de vue Map en tant qu'entités de table? (autre que d'avoir une table et une vue implémentant la même interface et de retourner cette interface) je voudrais garder le type de retour comme MyTableObject.

je suis tombé sur Auto Mapper, mais pas sûr que ce serait approprié pour ce scénario ..

Répondre

2

On dirait que je l'ai trouvé une solution fraîche à ce ..

Dans un premier temps j'ai essayé de mettre en œuvre l'approche de l'interface et exécuter dans une casting issues (à l'aide des interfaces aux côtés de mon constructeur prédicat), et aussi avec les interfaces ayant pour créer des classes partielles pour chaque entité qui implémentent l'interface ..

la réponse .. POCOs.

J'ai utilisé Poco Template for EF, et j'ai simplement modifié xxxPocoGenerator.Context.tt pour renvoyer l'objet MyTable de la collection MyViews (une ligne).

public ObjectSet<Trade> v_Trade { 
     get { return _v_Trade ?? (_v_Trade = CreateObjectSet<Trade>("Trades")); } 
} 

agréable et facile ..

+0

Je suppose que vous appelleriez cette frappe de canard. J'aime ça. Je suis avec vous en ce que ma première pensée est de me tuer avec des interfaces. J'aime mieux ton approche. –

2

Vous pouvez écrire une procédure stockée (ou CommandText dans le modèle, sans créer DB Object) qui va simplement appeler « Sélectionner * de View ". Puis create Function Import pour cette procédure et définissez le type de retour à MyTableObject.

Questions connexes