C# 具有多个表和多对多关系的复杂EntityFramework查询
我花了很长时间让实体框架做我想做的事情。我正在编写一个提要聚合器,这样我就可以将多个rss提要添加到一个“提要列表”中,该列表将对所有单独的播客进行分组,并按pubDate排序 类(除FeedListFeed外,所有类都具有名为Id的标识列):C# 具有多个表和多对多关系的复杂EntityFramework查询,c#,entity-framework-4,linq-to-entities,C#,Entity Framework 4,Linq To Entities,我花了很长时间让实体框架做我想做的事情。我正在编写一个提要聚合器,这样我就可以将多个rss提要添加到一个“提要列表”中,该列表将对所有单独的播客进行分组,并按pubDate排序 类(除FeedListFeed外,所有类都具有名为Id的标识列): 提要(Id是标识主键,具有列表项属性) FeedItem(Id是标识主键,与int FeedId和Feed Feed属性一样) FeedList(FeedListName是字符串,List Feeds属性) FeedListFeed(多对多链接表、Fee
modelBuilder.Entity<FeedListFeed>().HasKey(x => x.FeedId).HasKey(x => x.FeedListId);
modelBuilder.Entity<FeedList>()
.HasMany(fl => fl.Feeds).WithMany(f => f.FeedLists)
.Map(t => t.MapLeftKey("FeedListId")
.MapRightKey("FeedId")
.ToTable("FeedListFeeds"));
从映射中删除此行
modelBuilder.Entity<FeedListFeed>()
.HasKey(x => x.FeedId)
.HasKey(x => x.FeedListId);
2)(更重要的是)这一行让EF考虑<代码> FoeListFoest作为一个实体,它不在你的模型中。结果是EF为它创建了一个名为
FeedListFeeds1
的单独表,因为FeedListFeeds
在多对多映射中保留为表名(.ToTable(“FeedListFeeds”)
)。对于多对多映射,不需要为链接表创建类。链接表由EF内部管理
编辑
当然,您还可以完全删除FeedListFeed
类
对于查询,我将尝试:
var query = from fi in ctx.FeedItems
where fi.Feed.FeedLists.Any(fl => fl.FeedListName == id)
orderby fi.PubDate descending
select fi;
我认为您的模型类中有所有必要的导航属性,因此应该可以进行此查询
modelBuilder.Entity<FeedListFeed>()
.HasKey(x => x.FeedId)
.HasKey(x => x.FeedListId);
modelBuilder.Entity<FeedListFeed>()
.HasKey(x => new { x.FeedId, x.FeedListId });
var query = from fi in ctx.FeedItems
where fi.Feed.FeedLists.Any(fl => fl.FeedListName == id)
orderby fi.PubDate descending
select fi;