C# 对具有子对象的复杂对象的SQL结果
我们正在寻找一种更有效的方法来构建具有完整父/子关系的对象,而不是遍历单独查询的结果并将子对象分配给父对象。现在这似乎是我们代码中的一个大瓶颈(我们经常需要一次处理1000到1000000个实体) 有没有一种方法可以将查询与返回父/子/孙关系的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
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提取要验证的命令文本;)