从1-多关系中创建1-1导航属性

本文关键字:导航 属性 创建 关系 | 更新日期: 2023-09-27 18:11:31

我正在针对一个现有的数据库实现EF,该数据库将培训课程与其参与者(包括以下讲师)链接在一起

Training
-------------------
ClassId (PK)
TrainingParticipant
-------------------
ParticipantId (PK)
ClassId (FK references Training)
PersonId (FK references Person)
ParticipantRoleId (FK references a role table)

参与者表应该有1-10名参与者和1名培训师。(以他们的ParticipantRoleId来区分。)我从数据库优先开发开始,并生成了一个edmx和上下文/模型,这些模型映射了培训和培训参与者之间的1-多关系;但是,它生成的导航属性将带回所有TrainingParticipant条目的集合。

我不断编码这样的查询,以检查或获取单个培训师参与者的记录,如下所示:

var trainer = context.TrainingParticipant.Where(p => p.ParticipantRoleId == 17).FirstOrDefault()
var students = context.TrainingParticipant.Where(p => p.ParticipantRoleId == 2)

我非常希望有一个导航属性,可以在复杂的查询中访问这些属性,并且当将模型绑定到ui控件时更直接。像这样:

var training = context.Training.Where(t => t.Instructor.Person.FirstName.Contains("John"));

是否有可能创建这样的导航属性,最好不改变任何表?

从1-多关系中创建1-1导航属性

如何在EF实体上为这个新属性创建一个新的getter呢?它只返回这个值

public class MyEntity{
   public int Id {get;set;}
   public ICollection<OtherThing> Things {get;set;}
   [NotMapped]
   public OtherThing TheOneRealThing 
   {
       get
       {
           return Things.First();
       }
   }
}

它不是一个"真正的"nav属性,但对于你的应用程序,它可能会像你期望的那样表现。