我从EF with MVC读了一篇帖子。这个例子使用了三个表与一对多的关系。设置StudendId
作为外键后,我可以在视图中直接调用Model.Enrollments
(模型是学生类型)。
我想知道如何与两张桌子建立多对多的关系。
开头:
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;}
}
但看起来TagId
和PostId
都是外键?我不知道该怎么做。
答案 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()