我有以下控制器,该控制器应该在数据库中创建一个新对象:
[HttpPost]
public ActionResult<Panels> CreateNewPanel(Panels panel)
{
_context.Panels.Add(panel);
_context.SaveChanges();
return CreatedAtAction(nameof(GetPanelById), new { id = panel.ID }, panel);
}
它正在接收一些JSON数据,例如:
{
"desc": "test5",
"frame": 2,
"aC240v": false
}
哪个映射到以下模型:
public class Panels
{
public int ID { get; set; }
public string Desc { get; set; }
public PanelFrames Frame { get; set; }
public bool AC240v { get; set; }
}
如果未设置“框架”,则大部分情况下都可以使用,但是,如上面的代码那样将其设置为整数,则失败,因为它是PanelFrames类型而不是整数。
PanelFrames是与面板具有一对多关系的另一种模型,每个面板只能有一个PanelFrame,因此在数据库中将其记录为简单的整数,即PanelFrames ID。
我如何进行协调,以使整数(即PanelFrame ID)通过API传递并记录在数据库中。 MS文档似乎没有涵盖这一点,尽管这似乎很常见,所以我一定不能理解某些事情,或者做一些非常错误的事情。
答案 0 :(得分:0)
如果您使用EF Core one-to-many relationships并保存主体实体(PanelFrames)id,则只需在Panel
模型中为导航属性添加外键。请参阅下面的演示:>
1。模型
public class Panels
{
[Key]
public int ID { get; set; }
public string Desc { get; set; }
public int FrameID { get; set; }
[ForeignKey("FrameID")]
public PanelFrames Frame { get; set; }
public bool AC240v { get; set; }
}
public class PanelFrames
{
[Key]
public int PanelFramesID { get; set; }
public string Name { get; set; }
public List<Panels> Panels { get; set; }
}
2。在我的情况下,我使用邮递员传递json数据,因此我需要在操作参数上使用[FromBody]
。
json:
{
"desc": "test5",
"frameid": 2,
"aC240v": false
}
操作:
[HttpPost]
public ActionResult<Panels> CreateNewPanel([FromBody]Panels panel)
然后将一个具有FrameId的新面板添加到数据库中。
3。如果您需要将面板与它们的框架一起使用,只需在操作中使用Include方法,例如
using Microsoft.EntityFrameworkCore;//Add necessary namespaces before
//...
var panels= _context.Panels
.Include(p => p.Frame)
.ToList();