Сначала создайте элемент из таблицы связей отношений в коде MVC 5, а затем назначьте элемент пользователю - PullRequest
0 голосов
/ 17 января 2019

Как я могу создать элемент с помощью таблицы отношений в коде MVC 5, а затем связать элемент с пользователем?

У меня есть таблица для практик и таблица для медицинских работников, которая имеет отношение ко многим. Медицинский работник может быть назначен для нескольких практик, которые я сохраняю в таблице ссылок.

Теперь я хочу создавать клиентов. Клиент - это медицинский работник, назначенный для практики, поэтому, если медицинский работник связан с двумя практиками, это будут два разных клиента. Мне бы хотелось, чтобы эти клиенты были взяты из связанной таблицы, уже находящейся в моей базе данных, чтобы мне не приходилось создавать клиентов вручную.

После того, как у меня появятся клиенты, я хочу назначить их идентифицирующему пользователю и связать другую таблицу с данными клиента, например, рейтингом клиента, контактным номером клиента и т. Д. Я смогу назначить клиента нескольким пользователям, и данные клиентов каждого пользователя будут будет отличаться, так как пользователь a может оценить клиента 10, а пользователь b может оценить клиента 5, и у каждого пользователя есть свой контактный номер для клиента. Однако пользователь не должен иметь возможности редактировать имя клиента или название практики, в котором он должен хранить детали из таблицы отношений, из которой я хочу получить данные.

Кто-нибудь знает, как мне это сделать?

Вот модели, которые у меня уже есть для медицинского работника и для практики.

Модель медицинского работника:

public class HealthProfessional : BaseAttributes
    {
        [Key]
        public int HealthProfessionalID { get; set; }

        public string Initials { get; set; }

        public string Name { get; set; }

        public string Surname { get; set; }

        public DateTime? BirthDate { get; set; }

        [Remote("CouncilNumberExists", "HealthProfessional", ErrorMessage = "The council number has been assigned to another health professional!")]
        public string CouncilNumber { get; set; }

        public int? PracticeID { get; set; }

        public int? DisciplineID { get; set; }

        public int? PracticeGradeID { get; set; }

        public string TelephoneNumber { get; set; }

        public string CellphoneNumber { get; set; }

        public string EmailAddress { get; set; }

        public string Notes { get; set; }

        public bool AppointmentOnly { get; set; }

        public virtual Discipline Discipline { get; set; }

        public virtual PracticeGrade PracticeGrade { get; set; }

        public virtual ICollection<Practice> Practices { get; set; }

        public virtual ICollection<ApplicationUser> Users { get; set; }
    } 

Практическая модель:

public class Practice : BaseAttributes
    {
        [Key]
        public int PracticeID { get; set; }

        [Remote("PracticeNumberExists", "Practice", ErrorMessage = "The practice number already exists!")]
        [Required(ErrorMessage = "Please enter a practice number")]
        public string PracticeNumber { get; set; }

        [Remote("PracticeNameExists", "Practice", ErrorMessage = "The practice name already exists!")]
        public string PracticeName { get; set; }

        public string PracticeTelephoneNumber { get; set; }

        [RegularExpression("^[a-zA-Z0-9_\\.-]+@([a-zA-Z0-9-]+\\.)+[a-zA-Z]{2,6}$", ErrorMessage = "Please enter a valid email address")]
        public string PracticeEmailAddress { get; set; }

        public int? PracticeGradeID { get; set; }

        public string PracticeAddress { get; set; }

        public virtual PracticeGrade PracticeGrade { get; set; }

        public virtual ICollection<HealthProfessional> HealthProfessionals { get; set; }
    } 

Это мой диспетчер для медицинского работника и практикующего спасения на случай, если этот код уместен:

public ActionResult Create()
        {
            ViewBag.DisciplineID = new SelectList(db.Disciplines.OrderBy(x => x.DisciplineName), "DisciplineID", "DisciplineName");
            ViewBag.PracticeGradeID = new SelectList(db.PracticeGrades.OrderBy(x => x.Grade), "PracticeGradeID", "Grade");
            var healthProfessional = new HealthProfessional();
            healthProfessional.Practices = new List<Practice>();
            PopulateAssignedPractices(healthProfessional);
            return View();
        }

        // POST: HealthProfessional/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see https://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "HealthProfessionalID,Initials,Name,Surname,BirthDate,CouncilNumber,DisciplineID,PracticeGradeID,TelephoneNumber,CellphoneNumber,EmailAddress,Notes,AppointmentOnly,CreatedBy,FK_CreatedByID,DateCreated,LastEditedBy,FK_LastEditedByID,DateLastEdited,IsDeleted")] HealthProfessional healthProfessional, string[] selectedPractices)
        {
            if (selectedPractices != null)
            {
                healthProfessional.Practices = new List<Practice>();
                foreach (var practice in selectedPractices)
                {
                    var practiceToAdd = db.Practices.Find(int.Parse(practice));
                    healthProfessional.Practices.Add(practiceToAdd);
                }
            }
            if (ModelState.IsValid)
            {
                db.HealthProfessionals.Add(healthProfessional);
                db.SaveChanges();
                return RedirectToAction("HealthProfessionals");
            }

            ViewBag.DisciplineID = new SelectList(db.Disciplines, "DisciplineID", "DisciplineName", healthProfessional.DisciplineID);
            ViewBag.PracticeGradeID = new SelectList(db.PracticeGrades, "PracticeGradeID", "Grade", healthProfessional.PracticeGradeID);
            PopulateAssignedPractices(healthProfessional);
            return View(healthProfessional);
        } 

private void PopulateAssignedPractices(HealthProfessional healthProfessional)
        {
            var allPractices = db.Practices;
            var healthProfessionalPractices = new HashSet<int>(healthProfessional.Practices.Select(i => i.PracticeID));
            var viewModel = new List<AssignedPractices>();
            foreach (var practice in allPractices)
            {
                viewModel.Add(new AssignedPractices
                {
                    PracticeID = practice.PracticeID,
                    PracticeName = practice.PracticeName,
                    Assigned = healthProfessionalPractices.Contains(practice.PracticeID)
                });
            }
            ViewBag.Practices = viewModel;
        } 

Помощь будет принята с благодарностью и заранее спасибо

...