实体框架-通过映射表加载带有标签的帖子

时间:2019-01-03 17:12:19

标签: .net entity-framework

我正在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();  

1 个答案:

答案 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();

如果要从那里访问标签,则始终可以添加一个只读属性,该属性从映射表项中获取它们。