本文介绍了实体框架的工作:多对多的关系表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个新闻机构,我得到基于他们NewSID的消息。现在我定义了一个新的实体,一个组,我想根据自己的组ID的消息。我定义了一个新闻组表ASLO到涉及该表在一起。

在新闻模型我有:

  public虚拟的ICollection< GroupNews> RelatedGroupID {搞定;组; }

所以,我认为我所定义的GroupNews表值,我可以在NewsService使用它。

现在让我们看一下NewsService:

 防爆pression<&Func键LT;新闻,布尔>>约束= NULL;    如果(USER_ID大于0&放大器;&放大器; PROJECT_ID大于0)
    {
        约束= E => (e.CreatorID == USER_ID&放大器;&安培; e.RelatedProjectTags.Any(P => p.ProjectID == PROJECT_ID));
    }
    否则如果(USER_ID大于0)
    {
        约束= E => (e.CreatorID == USER_ID);
    }
    否则如果(PROJECT_ID大于0)
    {
        约束= E => (e.RelatedProjectTags.Any(P => p.ProjectID == PROJECT_ID));
    }    其他
    {
        约束= NULL;
    }    IEnumerable的<新闻> result_list = NULL;    如果(约束!= NULL)
    {
        result_list = newsRepository.GetMany(约束).OrderByDescending(E => e.CreatedOn).Skip(偏移);
    }
    其他
    {
        result_list = newsRepository.GetAll()OrderByDescending(E => e.CreatedOn)。.Skip(补偿);
    }    如果(计数大于0)
    {
        result_list = result_list.Take(计数);
    }    返回result_list.ToList<新闻>();
}

}

我为了定义基于组ID约束这一行添加到它。

 否则如果(的groupId大于0)
    {
        约束= E => (e.RelatedGroupID.Any(N => n.GroupID ==的groupId));
    }

似乎错了,给我这个错误:

解决方案

1.You does not need GroupNewsID in GroupNews table. You need to drop this column and create complex key by GroupID and NewsID. In the News entity you need to define property:

    public virtual ICollection<Group> Groups
    {
        get;
        set;
    }

In the default constructor for this entity you need to initialize property(need for lazy load):

Groups = new List<Group>();

Similar changes for Group entity.

2.In the GroupMap.cs you need to define

this.HasMany(t => t.News)
    .WithMany(t => t.Groups)
    .Map(m =>
        {
            m.ToTable("GroupNews");
            m.MapLeftKey("GroupID");
            m.MapRightKey("NewsID");
        });

3.Write tests for NewsRepository and GroupRepository.

这篇关于实体框架的工作:多对多的关系表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-23 09:00