我希望在我的某些实体之间执行看似困难的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);
您可以提供任何有关此方面的帮助。
谢谢!
答案 0 :(得分:0)
如果我说得对,你只想知道一组基于属性的程序,家庭ID?这听起来不像是Program对象的属性,而是一组程序。我只会在程序实体中拥有程序ID和系列ID(这听起来更像是我的类别),当您需要了解相关程序时,您只需查询实体:
var relatedPrograms = context.Programs.Where(p => p.FamilyId == myFamilyId).ToList();