Entity framework 将旧ado.net web应用迁移到EF

Entity framework 将旧ado.net web应用迁移到EF,entity-framework,Entity Framework,考虑这个问题 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 pws

考虑这个问题

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)
在旧的实现中,它读取页面上的小部件&它们的皮肤&我有一个函数在返回的行中循环&通过其皮肤和小部件实例生成一个页面小部件。 每个小部件的皮肤都有三行,最后我们会收到一个列表,其中包含它需要操作的所有内容

我在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; }
}
公共部分类小部件:BaseEntity{
公共int ID{get;set;}
public int PageTemplateID{get;set;}
公共页面模板页面模板{get;set;}
public int WidgetDefinitionID{get;set;}
公共WidgetDefinition WidgetDefinition{get;set;}
public int-WidgetSkinID{get;set;}
公共WidgetSkin WidgetSkin{get;set;}
//省略了其他属性
}
公共部分类WidgetDefinition:BaseEntity{
公共int ID{get;set;}
公共字符串标题{get;set;}
//省略了其他属性
公共虚拟ICollection小部件{get;set;}
}
公共部分类WidgetSkin:BaseEntity{
公共int ID{get;set;}
公共字符串名称{get;set;}
//省略了其他属性
公共虚拟ICollection小部件{get;set;}
公共虚拟ICollection WidgetSkinRows{get;set;}
}
公共部分类WidgetSkinRow:BaseEntity{
公共int ID{get;set;}
public int-WidgetSkinID{get;set;}
公共虚拟WidgetSkin WidgetSkin{get;set;}
}
我需要一个额外的业务层做同样的事情吗

使用EF,我只想一次访问DB。

您可以使用“渴望加载”方法来完成此操作

您的查询将如下所示:

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();
}