Как я могу создать элемент с помощью таблицы отношений в коде 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;
}
Помощь будет принята с благодарностью и заранее спасибо