我正在针对现有数据库实施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和context / models,它们映射了Training和Training Participant之间的1-Many关系;但是,它生成的导航属性将带回所有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"));
是否可以创建这样的导航属性,最好不要更改任何表?
答案 0 :(得分:0)
如果在EF实体上为这个新属性创建一个新的getter,它返回只返回这个值
public class MyEntity{
public int Id {get;set;}
public ICollection<OtherThing> Things {get;set;}
[NotMapped]
public OtherThing TheOneRealThing
{
get
{
return Things.First();
}
}
}
它不是一个“真正的”导航属性,但对于你的应用程序,它可能会完全按照你的预期运行。