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

时间:2018-09-05 21:57:17

标签: c# asp.net-core .net-core

我是ASP CORE的新手,我试图发布来自Angular 6客户端的JSON。

JSON 如下所示(请使用格式化程序的任何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"]}]}

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

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

列: MenuId, 日期, FK_Supplier

EF核心模型:

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

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

列: MenudiaId, FK_AlimentId, FK_MenuId, 迪亚

EF核心:

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

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

菜单:

enter image description here

菜单项:

enter image description here

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

NewMenuContent模型:

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. 

注意:该问题的某些变量和属性已从西班牙语翻译为英语,如果您看到任何键入错误,请不要注意它。

那么如何如上图所示在menudia表中插入数据?请注意,我希望在上面发布的相同控制器和相同功能中做到这一点。

此过程的登录名是用户每天将选择一系列饮食,这些饮食将成为特定供应商的“食物”菜单的一部分,因此,例如,如果用户选择供应商“麦当劳”,他将能够选择每天几种饮食(星期一=汉堡,薯条,鸡块,可乐)。

与在网络上搜索并尝试各种不同的尝试都没有成功一样,对此提供的任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

此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上有一个示例应用。