微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – EF条件包含实体类型

请假设这个架构:
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)
    ...
    ...
;

我知道我可以单独做,但我不想要因为我有很多实体,我需要最小化数据库请求.

我不想使用延迟加载,因为这也会产生许多数据库请求.

怎么实现呢?

解决方法

你能尝试这样的事吗:
public static class Extensions
{
    public static IQueryable<Mammal> IncludeExtraEntities<Mammal,T>(this IQueryable<Mammal> query,T derivedType) where T :Mammal
    {
        if (derivedType is Dog)
            return query.Include("Tail");
        if (derivedType is Bat)
            return query.Include("Wing");
        return query;
    }
}

然后在你的db调用中:

var query = myContext.Mammals.IncludeExtraEntities(typeof(Dog));

也许这会奏效.

原文地址:https://www.jb51.cc/csharp/99802.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐