Размещать данные JSON в нескольких моделях / таблицах с одного контроллера - PullRequest
0 голосов
/ 06 сентября 2018

Я относительный новичок в ASP CORE, и я пытаюсь опубликовать JSON со стороны Angular 6 Client.

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 таблицы, первая из которых является основной таблицей, имеющей такую ​​структуру:

Название модели и таблица "Меню".

Colums: MenuId, Дата, FK_Supplier

Модель EF Core:

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

Вторым является "menudia" (таблица и модель):

Colums: MenudiaId, FK_AlimentId, FK_MenuId, Диаметр

EF Core:

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

Menudia:

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. 

ПРИМЕЧАНИЕ: некоторые переменные и свойства этого вопроса были переведены с испанского на английский, если вы видите какую-либо ошибку при наборе, не обращайте на это внимания.

Итак, как мне вставить данные в таблицу меню, как показано на рисунках выше? Обратите внимание, что я хотел бы, чтобы это было в том же контроллере и в той же функции, что и выше.

Логин этого процесса, при котором пользователь будет выбирать диапазон блюд в день, который будет частью меню продуктов питания конкретного поставщика, поэтому, например, если пользователь выберет поставщика «Макдональдс», он сможет выбрать несколько блюд в день (понедельник = гамбургер, картофель фри, куриные наггетсы, кола).

Любая помощь в этом вопросе очень ценится, так же как и при поиске в Интернете и пробовании множества разных вещей без успеха.

1 Ответ

0 голосов
/ 06 сентября 2018

Эта документация Microsoft может помочь: Сохранение связанных данных

Если вы создадите несколько новых связанных объектов, добавление одного из них в контекст приведет к добавлению других объектов..

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 должен создавать связанные сущности, как вы описали в своем вопросе.

В * 1012 есть пример приложения* GitHub .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...