基于鉴别器(类型)列的实体框架导航属性

时间:2014-09-26 10:13:35

标签: c# linq entity-framework navigation-properties

我有3个实体

Provider
{
    ProviderId -PK
    Name
}

ProviderType1
{
    ProviderType1Id-PK
    Name
}

ProviderType2
{
    ProviderType2Id-PK
    Name
}

然后我有一个名为PreferredProvider的另一个实体,它用作Provider之间的映射器,用于从ProviderType1或ProviderType2设置首选提供者。它具有这样的列。

PreferredProvider
{
    PreferredProviderId - PK
    ProviderId - FK Provider
    PrefProviderId - FK ProviderType1,ProviderType2 
    PrefProviderType - discriminator column to detect type of provider

    // navigation properties
    [ForeignKey("PrefProviderId")]
    ProviderType1 Prov1

     // navigation properties
    [ForeignKey("PrefProviderId")]
    ProviderType2 Prov2

}

所以我正在使用像这样的导航属性

GetDbSet<PreferredProvider>().Where(p => p.ProviderId == 4 && p.PrefProviderType == 'ProviderType1').Select(p => p.Prov1).ToList();

我的问题是,当我处理一种类型,即ProviderType1(s)时它很好,但是当我必须获得包含ProviderType1(s)和ProviderType2(s)的提供者的所有首选提供者时,如何组合。实际上,我可以使用左连接但是想要更好的方法。请帮助我。

0 个答案:

没有答案