2012-09-06 3 views
0

considèrent cette requêtemigration ancienne application web ado.net EF

Select (some properties from all 3 Tables) 
    From PageWidgets pw LEFT JOIN PageWidgetDefinition pwd 
     On pwd.ID = pw.WidgetID 
    LEFT JOIN PageWidgetSkin pws 
     ON pws.ID = pw.SkinInstanceID 
    LEFT JOIN PageWidgetSkinRows pwsr 
     On pwsr.SkinID = pws.ID Where pw.PageID = *x* 
    Order By (some properties) 

dans l'ancienne mise en œuvre, il lit des widgets sur une page & leur peau & i ont une fonction en boucle à travers les lignes de retour & faire un pagewidget par son skin & son instance de widget. chaque widget a trois rangs pour sa peau, et enfin nous recevons une liste qui a tout ce qu'il faut pour faire fonctionner

j'ai ces classes dans EF

public partial class Widget: BaseEntity { 
    public int ID { get; set; } 

    public int PageTemplateID { get; set; } 
    public PageTemplate PageTemplate { get; set; } 

    public int WidgetDefinitionID { get; set; } 
    public WidgetDefinition WidgetDefinition { get; set; } 

    public int WidgetSkinID { get; set; } 
    public WidgetSkin WidgetSkin { get; set; } 
      //other properties omitted 

} 


public partial class WidgetDefinition: BaseEntity {    
    public int ID { get; set; } 
    public string Title { get; set; } 
      //other properties omitted 
    public virtual ICollection<Widget> Widgets { get; set; } 
} 



public partial class WidgetSkin: BaseEntity { 
    public int ID { get; set; } 
    public string Name { get; set; } 
      //other properties omitted 

    public virtual ICollection<Widget> Widgets { get; set; } 
    public virtual ICollection<WidgetSkinRow> WidgetSkinRows { get; set; } 
} 



public partial class WidgetSkinRow: BaseEntity { 

    public int ID { get; set; } 

    public int WidgetSkinID { get; set; } 
    public virtual WidgetSkin WidgetSkin { get; set; } 
} 

Ai-je besoin d'une couche bussiness supplémentaire faisant la même chose? En utilisant EF, je veux avoir seulement un voyage à DB.

Répondre

1

Vous pouvez utiliser la méthode "chargement rapide" pour cela.

Votre requête sera alors ressembler à quelque chose comme ceci:

using (var entities = new WidgetEntities()) 
{ 
    var query = from w in entities.Widgets.Include("WidgetDefinition").Include("WidgetDefinition.Widgets").Include("WidgetSkins").Include("WidgetSkins.WidgetSkinRows") 
    where w.Page = *x* 
    order by w.someproperty 
    select w; 

    Widget myWidget = query.First(); 
} 
Questions connexes