请假设以下系统架构:
public class Mammal
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Dog : Mammal
{
public int TailId { get; set; }
public Tail Tail { get; set; }
}
public class Bat : Mammal
{
public int WingId { get; set; }
public Wing Wing { get; set; }
}
public class Buffalo : Mammal
{
public virtual ICollection<Horn> Horns { get; set; }
}
public class Tail
{
public int Id { get; set; }
...
}
public class Wing
{
public int Id { get; set; }
...
}
public class Horn
{
public int Id { get; set; }
...
}
现在,我的背景是这样的:
public class MyContext : DbContext
{
public DbSet<Mammal> Mammals { get; set; }
}
因此,我希望只使用一个 SQL 查询,并包含(和加载)所有嵌套实体,类似于:
var query = myContext.Mammals
.IncludeIfTypeIs<Dog>(d => d.Tail)
.IncludeIfTypeIs<Bat>(b => b.Wing)
.IncludeIfTypeIs<Buffalo>(b => b.Horns)
...
...
;
我知道我可以分别做到这一点,但我不想这样做,因为我有很多实体,并且我需要最小化数据库请求。
我不想使用延迟加载,因为这也会产生许多数据库请求。
如何实现这一点?
Mammal
的单个实例上进行操作,我认为这完全违背了LINQ to SQL的目的。 - Jenish Rabadiya