Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对具有子对象的复杂对象的SQL结果_C#_Sql_Asp.net Mvc - Fatal编程技术网

C# 对具有子对象的复杂对象的SQL结果

C# 对具有子对象的复杂对象的SQL结果,c#,sql,asp.net-mvc,C#,Sql,Asp.net Mvc,我们正在寻找一种更有效的方法来构建具有完整父/子关系的对象,而不是遍历单独查询的结果并将子对象分配给父对象。现在这似乎是我们代码中的一个大瓶颈(我们经常需要一次处理1000到1000000个实体) 有没有一种方法可以将查询与返回父/子/孙关系的db.Database.SqlQuery(“SELECT*FROM xyz)一起使用 public class Parent { public int Id { get; set; } public string Name { get; s

我们正在寻找一种更有效的方法来构建具有完整父/子关系的对象,而不是遍历单独查询的结果并将子对象分配给父对象。现在这似乎是我们代码中的一个大瓶颈(我们经常需要一次处理1000到1000000个实体)

有没有一种方法可以将查询与返回父/子/孙关系的
db.Database.SqlQuery(“SELECT*FROM xyz)
一起使用

public class Parent
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Child> Children { get; set; }
}

public class Child
{
    public int Id { get; set; }
    public List<Grandchild> Grandchildren { get; set; }
}

public class Grandchild
{
    public int Id { get; set; }
}
公共类父类
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表子项{get;set;}
}
公营儿童
{
公共int Id{get;set;}
公共列表子对象{get;set;}
}
公家子弟
{
公共int Id{get;set;}
}

使用EF,您可以执行以下操作

db.Parent.Include(e=> e.Child).Include(e=> e.Child.SelectMany(s=> s.Grandchild));

使用SqlQuery,您应该确保SQL SELECT包含所有必要的列,必要时使用别名以匹配对象属性名称

您考虑过使用实体框架吗?在Dapper中,您可以执行
QueryMultiple
,它可以拉出多个结果集。它还具有
splitOn
可以拆分一个对象le resultset to multiple Objects我们正在使用EF,但它执行的查询有时非常慢,或者当我们可以使用这样的常规SQL查询时,它会创建许多到数据库的往返。@Ali因为我们可以将查询结果转换为ViewModel,所以我们可以设置ViewModel的其他属性,如父Id等。这对我们正在做的事情非常有帮助,而对于EF查询我们不会这样做。这会执行一次数据库访问吗?我们遇到了EF查询效率低下/速度慢/导致多次数据库访问的问题,我们可以使用常规SQL查询一次完成。使用include导致对数据库的单个请求。使用profiler over SQL或e提取要验证的命令文本;)