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