我正在C#中使用Entity Framework从以下表中加载数据:
我有三个表:
Table Post:
PostsID
Name
Description
CreatedBy
Table Tag:
TagID
Title
CreatedBy
Table PostTagMap:
MapID
PostID
TagID
我正在尝试加载所有帖子,并且还希望通过映射表加载相关标签。
我在SQL Server中创建了表,然后在其上创建了EF映射。
邮政课:
public Post()
{
this.PostsTagsMaps = new HashSet<PostsTagsMaps>();
this.Tags = new List<Tag>();
}
public int PostId { get; set; }
public string Name { get; set; }
public virtual ICollection<PostsTagsMap> PostsTagsMaps { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
标签类:
public Tag()
{
}
public int TagId { get; set; }
public string Title { get; set; }
public string CreatedBy { get; set; }
public virtual ICollection<PostsTagsMap> PostsTagsMaps { get; set; }
public partial class PostsTagsMap
{
public int MapId { get; set; }
public int PostId { get; set; }
public int TagId { get; set; }
public string CreatedBy { get; set; }
public virtual Post Post { get; set; }
public virtual Tag Tag { get; set; }
}
posts = context.Posts.Include(c => c.PostsTagsMaps).ToList();
答案 0 :(得分:0)
您可以使用post标签上的include急切地获取它们。没有看到任何有关您的映射的代码,它将类似于:
posts.Include(post => post.PostTags.Select(postTag => postTag.Tag));
现在您已经添加了一些代码:
posts = context.Posts.Include(c => c.PostsTagsMaps.Select(pt => pt.Tag)).ToList();
如果要从那里访问标签,则始终可以添加一个只读属性,该属性从映射表项中获取它们。