0

我有两张桌子,说:

老师 1--------* 学生

我只有一个名为“学生”的导航属性。

仅对于此示例,我想做的是创建两个名为“男孩”的导航属性和另一个名为“女孩”的导航属性,这将基于名为“IsMale”的布尔值。

我已经从数据库生成了实体模型,所以这不是代码优先的。

谁能告诉我该怎么做?我需要修改生成的源吗?如果是这样,如果发生更新会发生什么,我会丢失代码吗?

谢谢你的时间!

克雷格

这是我的解决方案:

添加导航属性,并在属性中选择教师和学生之间的关联。

在生成的代码中,找到导航属性“男孩”,在末尾添加一个 .where 来选择男孩,例如:

    [XmlIgnoreAttribute()]
    [SoapIgnoreAttribute()]
    [DataMemberAttribute()]
    [EdmRelationshipNavigationPropertyAttribute("SchoolModel", "FK_Pupils_Teacher", "Pupil")]
    public EntityCollection<Pupil> Boys
    {
        get
        {
            return (EntityCollection<PriceKey>)((IEntityWithRelationships)this).RelationshipManager.GetRelatedCollection<PriceKey>("SchoolModel.FK_Pupils_Teacher", "Pupil").Where(p => p.IsMale == true);
        }
        set
        {
            if ((value != null))
            {
                ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedCollection<Pupil>("SchoolModel.FK_Pupils_Teacher", "Pupil", value);
            }
        }
    }

这就是我的解决方案。所以现在我可以使用导航属性并将我想要的传回。

我也喜欢下面的答案!并认为这是一个更好的主意:)

干杯!

4

1 回答 1

1

Teacher.cs文件放在文件所在的文件夹.EDMX中:

partial class Teacher
{
    public IEnumerable<Pupil> Boys
    {
        get { return Pupils.Where(x => x.IsMale); }
    }

    public IEnumerable<Pupil> Girls
    {
        get { return Pupils.Where(x => !x.IsMale); }
    }
}

顺便说一句,这些不是导航属性。我不认为你能做到这一点。

于 2012-11-20T16:35:10.797 回答