首页 > 解决方案 > 在没有导航属性的情况下为多对多添加具有连接的模型到另一个模型

问题描述

当我有这样的模型设置时,如何插入Tag属于模型的模型:Post

邮政

public class Post
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public virtual ICollection<Tag> Tags { get; set; }
    public Post()
    {
       Tags = new List<Tag>();
    }
}

标签

public class Tag
{
    public int Id { get; set; }
    public string Name { get; set; }
}

这个问题建议创建一个 Post 对象,然后将 Tags 添加到 Tags 集合,我无法让它工作: Insert/Update Many to Many Entity Framework 。我该怎么做?

我想在数据库中添加标签到帖子,我怎么能用 EF 做到这一点。我是 EF 的新手。

这是我尝试过的,如果我将它发送到 API,它不会插入任何记录,我可以看到tag Id = 0数据库中不存在新的,但我认为这会导致外键约束错误,不确定是否需要为标签自动生成 ID:

{
    Name: "test"
}

API

[ResponseType(typeof(Tag))]
public IHttpActionResult PostTag(Tag tag)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var post = new Post();
    var tags = new List<Tag>();
    tags.Add(tag);

    post.Tags.Add(tag);
    post.Id = 10;
    db.Entry(post).State = EntityState.Modified;
    db.SaveChanges();

    return CreatedAtRoute("DefaultApi", new { id = tag.Id }, tag);
}

标签: entity-frameworkasp.net-web-api2

解决方案


我先获取帖子添加然后保存更改。

[ResponseType(typeof(Tag))]
public IHttpActionResult PostTag(TagDTO tagDTO)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    var post = db.Posts.Find(TagDTO.PostId);
    post.Tags.Add(new Tag() { Name = tagDTO.Name });            
    db.SaveChanges();

    return CreatedAtRoute("DefaultApi", new { id = post.Tags.First().Id }, post);
}

推荐阅读