检索实体框架中的所有继承实体和导航属性



>我有一个类定义为:

public class ElectronicFundTransfer
{
    public int Id { get; set;}
    public int OrganisationId { get; set; }
}

和两个继承的类:

 public class PayPal : ElectronicFundTransfer
{
    public BankAccount BankAccount { get; set; }
}
 public class PaymentCard : ElectronicFundTransfer
{
    public FxRate FxRate { get; set; }
}

请注意,这已经有所简化,还有其他继承的类和其他导航属性。

现在,对于一个组织,我想得到他们所有的ElectronicFundTransfers。这将返回一个包含 PayPalPaymentCard 的列表。我还想分别包括BankAccountFxRate

如果我将这些值作为逗号分隔的值添加到查询的Include()方法中,则会出错,声称"支付卡没有名为'FxRate'的属性。

我尝试做:

_unitOfWork.ElectronicFundTransferRepository.Queryable() .Where(o => o.OrganisationId == organisationId) .Include<PayPal>("BankAccount");

但是我得到错误

Instance argument: cannot convert from 'System.Linq.IQueryable<ElectronicFundTransfer>' to 'System.Linq.IQueryable<PayPal>'

我可以在一个查询中执行此操作,还是需要为每种类型调用数据库?

谢谢

这个答案实现了Gert Arnold的评论:

        Context context = new Context();
        int orgId = 1;
        ElectronicFundTransfer[] paymentcards = context.PaymentCards.Where(pc => pc.OrganisationId == orgId).ToArray();
        ElectronicFundTransfer[] paypals = context.PayPals.Where(pp => pp.OrganisationId == orgId).ToArray();
        ElectronicFundTransfer[] all = paymentcards.Union(paypals).ToArray();

编辑:实现此目的的另一种方法是使用每个层次结构的表。在这种情况下,上下文类仅包含以下 DbSet:

public DbSet<ElectronicFundTransfer> ElectronicFundTransfers { get; set; }

查询只需要调用一次数据库:

ElectronicFundTransfer[] all = context.ElectronicFundTransfers.Where(ef => ef.OrganisationId == orgId).ToArray();

最新更新