2013-05-01 102 views
0

我关于实施EF反对到它的参与者,包括教师如下链接培训班现有的数据库工作创建1-1导航属性从1一对多的关系

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和上下文/模型;但是,它生成的导航属性将带回所有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

什么关于你的EF实体创建一个新的getter方法返回这个新属性只是返回这个值

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

它不是一个“真正”的导航属性,但对于您的应用程序也可能会做出你会期待。

+0

@ user2337991嗯有趣的是,我不是100%肯定如果您首先通过带有DB的部分包含属性,该如何忽略该属性。如果[未映射]注释不起作用,我不太确定你是如何做到这一点的。我会有一些想法,或者如果有人知道我好奇 – 2013-05-01 02:57:27