Зарегистрируйте отношения один ко многим в ASP. NET MVC - PullRequest
0 голосов
/ 21 марта 2020

У меня есть два класса - родительский и дочерний.

Это родительский класс

[Table("tbl_Parent")]
public partial class Parent
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Key]
    [ScaffoldColumn(false)]
    public int Parent_Id { get; set; }

    [Required(ErrorMessage = "you must provide parent First Name")]
    [Display(Name = "Full Name")]
    public string Parent_Full_Name{ get; set; }

    [Required(ErrorMessage = "you must provide parent Email Address")]
    [Display(Name = "Email Address")]
    [DataType(DataType.EmailAddress)]
    [EmailAddress(ErrorMessage = "Correct Input")]
    [StringLength(100, ErrorMessage = "at least 10 Char", MinimumLength = 10)]

    public string Parent_Email { get; set; }

    [Required(ErrorMessage = "you must provide parent phone number")]
    [Display(Name = "Phone Number")]
    [DataType(DataType.PhoneNumber)]

    public int Parent_Phone { get; set; }

    [Required(ErrorMessage = "you must provide parent password")]
    [Display(Name = "Password")]
    [DataType(DataType.Password)]
    public string Parent_Password { get; set; }

    public string Parent_Location { get; set; }

    [Required(ErrorMessage = "you must provide parent status")]
    [Display(Name = "Parent status")]

    public string Parent_status { get; set; }
    public string Par_User_Type { get; set; }

    public ICollection<Child> child { get; set; }
}

и это дочерний класс

[Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Chi_Id { get; set; }

    [Required(ErrorMessage ="you must provide child first name")]
    [Display(Name ="Child First Name")]
    public string  Chi_First_Name { get; set; }

    [Required(ErrorMessage ="you must provide child last Name")]
    [Display(Name ="Child Last Name")]
    public string Chi_Last_Name { get; set; }

    [Required(ErrorMessage ="you must provide child age")]
    [Display(Name ="Child Age")]
    [Range(0,18, ErrorMessage = "Correct Input")]
    public int Age { get; set; }

    [Required(ErrorMessage ="you must provide child gender")]
    [Display(Name ="Child Gender")]
    public string Gender { get; set; }

    [Display(Name ="Child School")]
    public string Chi_School { get; set; }

    [Required(ErrorMessage ="you must provide parent status")]
    [Display(Name ="Child Parent Status")]
    public string Chi_parent_status { get; set; }

    [Display(Name ="Child Image Path")]
    public string Chi_Image_Path { get; set; }

    public virtual Admin admin { get; set; }
    public int Adm_ID { get; set; }

    public virtual Parent parent { get; set; }
    public int Par_ID { get; set; }
}

Родительский класс может иметь много детей.

Я хочу добавить идентификатор ребенка в родительский класс через контроллер. Это мой контроллер:

[HttpGet]
public ActionResult Rigester()
{
        if (Session["ID"] == null)
        {
            return RedirectToAction("Login", "Home");
        }

        return View();
}

[HttpPost]
public ActionResult Rigester(Parent parent,int id)
{
     if (ModelState.IsValid)
     {
         using (Context db = new Context())
         {
             var child1 = db.child.Where(x => x.Chi_Id == id).First();
             parent.Par_User_Type = "Parent";
             parent.child.Add(child1);
             db.parent.Add(parent);
             db.SaveChanges();

             return RedirectToAction("Home", "Admin");
         }
     }

     return View();
}

В контроллере я получаю ошибку при выполнении этого кода:

Исключение нулевой ссылки

на этом строка кода:

parent.child.Add(child1);

Конец каждого класса связан с другим классом.

Как добавить дочерний элемент при регистрации нового родителя?

1 Ответ

0 голосов
/ 22 марта 2020

Вместо добавления через свойства навигации в вашем контроллере вы можете назначить ParentId в качестве внешнего ключа для дочернего элемента.

В приведенном ниже коде сначала мы добавили parent в базу данных, затем мы присвоили parentId в дочерний объект.

[HttpPost]
public ActionResult Rigester(Parent parent,int id)
{
     if (ModelState.IsValid)
     {
         using (Context db = new Context())
         {
             parent.Par_User_Type = "Parent";
             db.parent.Add(parent);
             db.SaveChanges();

             var child1 = db.child.Where(x => x.Chi_Id == id).First();
             child1.Par_Id = parent.Parent_Id;
             db.SaveChanges();

             return RedirectToAction("Home", "Admin");
         }
     }

     return View();
}
...