Контроллер для связанных моделей в ASP.NET Ядро

#c# #asp.net-core #entity-framework-core

#c# #asp.net-ядро #сущность-фреймворк-ядро

Вопрос:

Мне нужно создать действие в контроллере для добавления данных из формы в базу данных (ядро Entity Framework). У меня есть две связанные модели с именами user и newsletter.Пример: когда добавляется новый пользователь, мне нужно добавить его также в таблицу рассылки. Я следую этому руководству https://learn.microsoft.com/cs-cz/aspnet/core/data/ef-mvc/complex-data-model?view=aspnetcore-3.1

Существует код:

     public class user
    {
      [Key]
      public int id { get; set; }

      //Other properties

      public string mail { get; set; }

   
      public virtual newsletter news { get; set; }

    }

   public class newsletter
   {
       [Key]
       public int newsId { get; set; }

       [ForeignKey("user")]
       public int userId { get; set; }

       [Required]
       public bool registered { get; set; }

   }
  

Я попытался создать какое-то действие (код ниже), но когда я проверяю сведения о пользователе, информационный бюллетень свойств всегда равен нулю.

Код контроллера:

     [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> register(user user, bool reg)
    {
        try
        {
            if(ModelState.IsValid)
            {
                user.news = new newsletter() { userId = user.id, registered = reg };
                user.passChng = DateTime.Today;
                _c.user.Add(user);

                await _c.SaveChangesAsync();
            }

            return RedirectToAction("registerForm");

        }
        catch (Exception ex)
        {
            return Content(ex.ToString());
        }
    }
  

Результат JSON:

 {
    "id": 2,

    //Other properties

    "mail": "me@mail.com",
    "news": null,
  }
  

Пожалуйста, кто-нибудь может написать действие для добавления данных в таблицу рассылки и связать их с пользователем? У меня абсолютно нет никакой другой идеи. Спасибо <3.

Комментарии:

1. Привет, Мартин, каковы твои требования? при отправке пользовательской модели он должен создавать пользователя и рассылку новостей? я не могу следовать

2. Когда отправляется новый пользователь, мне нужно зарегистрировать его также в таблице рассылки. Я следую этому руководству learn.microsoft.com/cs-cz/aspnet/core/data/ef-mvc /.

3. Если между пользователем и новостной рассылкой существует связь 1 .. 1, вам следует добавить свойство навигации type User в вашу модель newsletter.cs . Попробуйте с этим и дайте мне знать. Вы всегда можете проверить фактический код SQL, который entity framework отправил в вашу базу данных с SQL Profiler

4. Да, существует связь 1 .. 1, но, честно говоря, я не знаю, что вы думаете о «свойстве навигации». Я пытаюсь сделать это в первый раз, поэтому не могли бы вы отредактировать мой код и опубликовать его как ответ, пожалуйста?

5. Я имел в виду это => entityframeworktutorial.net/code-first /. … Я не уверен на 100%, что с аннотацией данных [ForeignKey] достаточно указать entity framework для создания отношений 1 — 1 между пользователями и рассылками. Добавьте a public User User {get; set;} (свойство навигации) в класс newsletter, a add-migration {something} и a update-database для обновления базы данных SQL. Проверьте, выполнили ли вы все шаги в этой статье