代码之家  ›  专栏  ›  技术社区  ›  Araldy

从一个控制器将JSON数据发布到多个模型/表中

  •  0
  • Araldy  · 技术社区  · 7 年前

    我是一个相对新的ASP核心和我试图张贴一个JSON,来自一个角度6客户端。

    这个 JSON文件

    {"supplier":10001,"date":"2018-09-03T20:42:29Z","summary":[{"day":"1","aliments": 
    ["1012","1016","1017","1013","1021","1020"]},{"day":"2","aliments": 
    ["1015","1019","1023","1022","1018","1014"]},{"day":"3","aliments": 
    ["1027","1031","1030","1026","1025","1029"]},{"day":"4","aliments": 
    ["1040","1039","1035","1033","1038","1036"]},{"day":"5","aliments": 
    ["1032","1037","1042","1043","1041","1038"]}]}
    

    此信息应插入两个表中。第一个表是具有以下结构的主表:

    模型和表格的名称为“菜单”。

    列: 梅努德,

    EF核心模型:

    public int MenuId { get; set; }
    public DateTime Date { get; set; }
    public int FkSupplier { get; set; }
    

    第二个是“菜单”(表格和模型):

    列: 美努迪亚, 食物, FK\U菜单,

    EF核心:

    public int? MenuDiaId { get; set; } 
    public int? FkAlimentId { get; set; }
    public int? FkMenuId { get; set; }
    public int? Dia { get; set; }
    

    我拍摄了两张图片,向您展示如何将数据插入数据库:

    菜单:

    enter image description here

    美努迪亚:

    enter image description here

    我创建了两个模型来处理我需要的数据,结果如下:

    public int? menuid { get; set; }
    public int suplidor { get; set; }
    public DateTime fecha { get; set; }
    public List<MenuItems> menuresumen { get; set; }
    

    MenuItems型号:

       public int Day { get; set; }
    
       public List<dynamic> alimentos { get; set; }
    

    我的控制器中已经有了这个,它成功地将数据插入到菜单表中:

    [HttpPost]
            public int  PostMenu([FromBody] NewMenuContent menu)
            {
    
                var newmenu = new Menu
                {
                    FkSuplidorId = menu.supplier,
                    Semana = menu.date,
                };
                var menuid = _context.Menu
                .Where(x => x.FkSupplierId == menu.supplier)
                .Where(x => x.date == menu.date)
                .Select(x => x.MenuId).FirstOrDefault();
                _context.Menu.Add(newmenu);
    
    
                _context.SaveChanges();
                return menuid;
    
            } //NOTE: "menu" is the json. 
    

    注意:这个问题的一些变量和属性已经从西班牙语翻译成英语,如果你看到任何输入错误,不要注意它。

    在这方面的任何帮助都是非常感谢的,因为在网上搜索和尝试各种不同的事情都没有成功。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Joel Richman    7 年前

    此Microsoft文档可能有助于: Saving Related Data

    如果创建多个新的相关实体,请将其中一个实体添加到 上下文也会导致添加其他内容。

    using (var context = new BloggingContext())
    {
        var blog = new Blog
        {
            Url = "http://blogs.msdn.com/dotnet",
            Posts = new List<Post>
            {
                new Post { Title = "Intro to C#" },
                new Post { Title = "Intro to VB.NET" },
                new Post { Title = "Intro to F#" }
            }
        };
    
        context.Blogs.Add(blog);
        context.SaveChanges();
    }
    

    我已经编写了类似的代码,可以验证EF Core是否应该创建您在问题中描述的相关实体。

    上有一个示例应用程序 GitHub