entity-framework - 在没有导航属性的情况下为多对多添加具有连接的模型到另一个模型
问题描述
当我有这样的模型设置时,如何插入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);
}
解决方案
我先获取帖子添加然后保存更改。
[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);
}
推荐阅读
- javascript - React-Native 应用程序重新加载而不是恢复上一个屏幕
- python - 在 Pandas DataFrame 中对包含字符串的列进行排序
- node.js - Node.js 和 mongoDB 多并发请求购物车结账功能
- arduino-esp8266 - 如何将 RFID 标签 UID 转换为单个整数值
- python - 气流网络服务器突然停止启动
- android - 5 月 6 日的 Chrome 更新破坏了 Webview
- java - 如何将 gradle-api 库添加到我的项目中?
- excel - 如何使用查找多个值来定义粘贴范围
- selenium - webdriver-manager update 命令总是第一次失败,但之后通过
- linux - Nginx 用户在 stat 命令上获得“权限被拒绝”而不是“没有这样的文件或目录”