EF Code First:在配置中链接非密钥属性

时间:2013-05-02 20:10:12

标签: c# entity-framework ef-code-first

我希望在我的某些实体之间执行看似困难的EF Code First关系。我搜索了Stack Overflow以及网络,但似乎无法想出任何东西。我有一个简单的课程概述如下。程序的PK是它的Id。它还具有(非PK)FamilyId值。没有“家庭”表或类似的东西。此外,“FamilyId”不是不同程序实体的Id值的FK。在我看来,我认为它是各种各样的“分组”。

public class Program
{
    public int Id { get; set; }

    public virtual List<Program> RelatedPrograms { get; set; }
    public int? FamilyId { get; set; }
}

让我用一些样本数据进一步解释。

Id:1,FamilyId:17
Id:2,FamilyId:17
Id:3,FamilyId:18
Id:4,FamilyId:17

在我的配置中使用EF Code First我想添加逻辑,如果我对这三个中的任何一个进行查询,那么将使用程序1,2和4填充“RelatedPrograms”属性(例如,这里的重点是它们都通过这种仲裁属性相互关联)。如果我查询程序3,那么在RelatedPrograms属性中只有1条记录,它将是程序3,因为没有别的东西共享同一个FamilyId。

我认为我的逻辑需要类似于以下内容,但以下内容会自动引用幕后的Id列;我需要将链接完全基于所访问程序的FamilyId列和数据库中其他程序的FamilyId值。

this.HasMany(p => p.RelatedPrograms).WithRequired().HasForeignKey(p => p.FamilyId);

您可以提供任何有关此方面的帮助。

谢谢!

1 个答案:

答案 0 :(得分:0)

如果我说得对,你只想知道一组基于属性的程序,家庭ID?这听起来不像是Program对象的属性,而是一组程序。我只会在程序实体中拥有程序ID和系列ID(这听起来更像是我的类别),当您需要了解相关程序时,您只需查询实体:

var relatedPrograms = context.Programs.Where(p => p.FamilyId == myFamilyId).ToList();