如何使用EntityFramework在asp.net MVC中映射多对多关系?

时间:2015-01-30 09:00:09

标签: asp.net-mvc entity-framework

我从EF with MVC读了一篇帖子。这个例子使用了三个表与一对多的关系。设置StudendId作为外键后,我可以在视图中直接调用Model.Enrollments(模型是学生类型)。 我想知道如何与两张桌子建立多对多的关系。

enter image description here

开头:

public class Post
{
    public int Id
    { get; set; }

    public int CategoryId
    { get; set; }
    public string Title
    { get; set; }

    public string ShortDescription
    { get; set; }

    public string Description
    { get; set; }

    public virtual ICollection<Tag> Tags
    { get; set; }
}
public class Tag
{
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int TagId
    { get; set; }

    public string Name
    { get; set; }

    public string UrlSlug
    { get; set; }

    public string Description
    { get; set; }

    public virtual ICollection<Post> Posts
    { get; set; }
}

我想致电Model.Tags以获取与帖子相关的所有标签,或致电Model.Posts以使所有帖子都属于视图中的标签。我想我需要一个像

这样的课程
public class TagPost
{
    public int TagId{get;set;}
    public int PostId{get;set;}
}

但看起来TagIdPostId都是外键?我不知道该怎么做。

1 个答案:

答案 0 :(得分:2)

<强>读:

var post1 = dbContext.Post.FirstOrDefault(x => x.PostId ==1);
 var tags = post1.Tags(); 

<强>插入

// Create a New Post Entity
var post = new Post();

// Assign it you values either from ViewModel or
    post.Title ="ManyToMany";
// Create your list of tags related to Post
    post.Tags = new List<Tags>();

// Add a Tag from Database to this List where TagId == 1
    post.Tags.Add(dbContext.Tags.First(s => s.TagId == 1));

// save Changes
    dbContext.SaveChanges();

保存更改后,您将在“多对多映射”表中看到有一条新记录

PostId = 2 // Considering you have PostId == 1 already in DB
TagId = 1 // Tag you added before dbContext.SaveChanges()