0

我希望在我的一些实体之间执行看似困难的 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 我想添加逻辑,如果我对这三个中的任何一个进行查询(例如,这里的重点是它们都是通过此任意属性相互关联)。如果我查询 Program 3,RelatedPrograms 属性中只有 1 条记录,它将是 Program 3,因为没有其他东西共享相同的 FamilyId。

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

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

您可以为此提供的任何帮助将不胜感激。

谢谢!

4

1 回答 1

0

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

var relatedPrograms = context.Programs.Where(p => p.FamilyId == myFamilyId).ToList();
于 2013-05-02T21:26:00.160 回答