EF代码优先:在配置中链接非关键属性

本文关键字:链接 非关键 属性 配置 代码 EF | 更新日期: 2023-09-27 18:11:48

我希望在我的一些实体之间执行一个看似困难的EF Code First关系。我搜索了所有的Stack Overflow以及网络,但似乎没有找到任何东西。我在下面列出了一个简单的类。程序的PK是它的Id。它还有一个(非pk) FamilyId值。没有"家庭"表或类似的东西。此外,"FamilyId"不是另一个Program实体的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,家族Id: 17
Id: 3,家族Id: 18
Id: 4, FamilyId: 17

在我的配置中首先使用EF代码,我想添加逻辑,如果我对这三个中的任何一个进行查询,就会用程序1、2和4填充"RelatedPrograms"属性(例如,这里的要点是它们都是通过这个任意属性相互关联的)。如果我查询程序3,在RelatedPrograms属性中只有1条记录,它将是程序3,因为没有其他东西共享相同的FamilyId。

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

<>之前。HasMany(p => p. relatedprograms). withrequired()。(p => p. familyid);

如果您能提供任何帮助,我将不胜感激。

谢谢!

EF代码优先:在配置中链接非关键属性

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

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