我有一个名为MenuContainer的课程
public partial class MenuContainer : IEquatable <MenuContainer>
{
[Column("Id ")]
[Key]
public int Id { get; set; }
public int MenuId { get; set; }
public int WareId { get; set; }
public int Price { get; set; }
public virtual Menu Menu { get; set; }
public virtual Ware Ware { get; set; }
public bool Equals(MenuContainer other)
{
return (this.Id == other.Id && this.MenuId == other.MenuId && this.WareId == other.WareId);
}
}
它与菜单有关系(每个菜单都有多菜单容器)。 现在,当我想加载带有关系的MenuContainer时,我可以使用Include()。像:
context.MenuContainers.Include("Menu").Include("Ware.WareCategory").Include("Ware.WareDescriptions.Description");
但我的问题是实体框架为此生成了长脚本 (约2000行脚本代码和嵌套选择和连接) 所以我决定写这样的自定义程序:(不是我想要的只是简单的一个)
SELECT
mc.MENU_CONTAINER_ID AS Id,
mc.MENU_ID AS MenuId ,
mc.WARE_ID AS WareId,
mc.WARE_PRICE_IN AS Price,
mc.WARE_PRICE2_IN AS Price2,
m.MENU_NAME_VC AS Name,
m.MENU_DESCRIPTION_VC AS [Description]
FROM dbo.MENU_CONTAINER mc
INNER JOIN dbo.MENU m ON m.MENU_ID = mc.MENU_ID
但是如何将我的脚本输出转换为MenuContainer类???
(你知道我应该创建MenuContainer及其关系&#34;菜单&#34;以及此脚本的输出)
我不想声明类,与脚本的输出相同并使用...... 喜欢
return this.Database.SqlQuery<CustomClass>(
"exec dbo.CustomeProcedure").ToList();
并填写CustomClass,然后执行很多foreach和groupby以及...... 生成我的MenuContainer类及其关系类
我该怎么办? EF如何处理这个问题?
答案 0 :(得分:0)
最后我发现,如果我想编写自定义过程,我应该有一个与输出相同的类,所以我创建一个类并用我的自定义过程填充它:
this.Database.SqlQuery<CustomClass>("exec dbo.CustomeProcedure").ToList();
但在我提到的这种情况下,我必须执行foreach并......来提取 我的类及其属性(如另一个实体的列表)。写作需要时间,但是 执行时间显着改善。 在之前的情况下,当我使用EF include()时,它需要大约2000毫秒 但现在我所做的所有foreach和转换需要大约300毫秒...
我认为EF在其中一个层面做同样的事情(我的意思是将sp转换为类)。